Skip to content

Commit 5a64e40

Browse files
committed
Optimize use catalog.db pattern
1 parent 2bd7555 commit 5a64e40

File tree

6 files changed

+75
-7
lines changed

6 files changed

+75
-7
lines changed

ql/src/java/org/apache/hadoop/hive/ql/ddl/database/use/SwitchDatabaseAnalyzer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void analyzeInternal(ASTNode root) throws SemanticException {
4747
readEntity.noLockNeeded();
4848
inputs.add(readEntity);
4949

50-
SwitchDatabaseDesc desc = new SwitchDatabaseDesc(catDbNamePair.getRight());
50+
SwitchDatabaseDesc desc = new SwitchDatabaseDesc(catDbNamePair.getLeft(), catDbNamePair.getRight());
5151
rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), desc)));
5252
}
5353
}

ql/src/java/org/apache/hadoop/hive/ql/ddl/database/use/SwitchDatabaseDesc.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,21 @@
3131
public class SwitchDatabaseDesc implements DDLDesc, Serializable {
3232
private static final long serialVersionUID = 1L;
3333

34+
private final String catalogName;
3435
private final String databaseName;
3536

36-
public SwitchDatabaseDesc(String databaseName) {
37+
public SwitchDatabaseDesc(String catalogName, String databaseName) {
38+
this.catalogName = catalogName;
3739
this.databaseName = databaseName;
3840
}
3941

4042
@Explain(displayName = "name", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })
4143
public String getDatabaseName() {
4244
return databaseName;
4345
}
46+
47+
@Explain(displayName = "catalogName", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })
48+
public String getCatalogName() {
49+
return catalogName;
50+
}
4451
}

ql/src/java/org/apache/hadoop/hive/ql/ddl/database/use/SwitchDatabaseOperation.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,21 @@ public SwitchDatabaseOperation(DDLOperationContext context, SwitchDatabaseDesc d
3838

3939
@Override
4040
public int execute() throws HiveException {
41+
String catName = desc.getCatalogName();
42+
if (catName != null && context.getDb().getCatalog(catName) != null) {
43+
SessionState.get().setCurrentCatalog(catName);
44+
} else if (catName != null) {
45+
throw new HiveException(ErrorMsg.CATALOG_NOT_EXISTS, catName);
46+
}
4147
String dbName = desc.getDatabaseName();
42-
if (!context.getDb().databaseExists(dbName)) {
48+
if (!context.getDb().databaseExists(catName, dbName)) {
4349
throw new HiveException(ErrorMsg.DATABASE_NOT_EXISTS, dbName);
4450
}
4551

4652
SessionState.get().setCurrentDatabase(dbName);
4753

4854
// set database specific parameters
49-
Database database = context.getDb().getDatabase(dbName);
55+
Database database = context.getDb().getDatabase(catName, dbName);
5056
assert(database != null);
5157

5258
Map<String, String> dbParams = database.getParameters();

ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2601,6 +2601,7 @@ public void alterCatalog(String catName, Catalog catalog) throws HiveException {
26012601
}
26022602

26032603
/**
2604+
* @deprecated please use {@link #databaseExists(String, String)}}
26042605
* Query metadata to see if a database with the given name already exists.
26052606
*
26062607
* @param dbName
@@ -2612,6 +2613,19 @@ public boolean databaseExists(String dbName) throws HiveException {
26122613
return getDatabase(dbName) != null;
26132614
}
26142615

2616+
/**
2617+
* Query metadata to see if a database with the given name already exists.
2618+
*
2619+
* @param catName
2620+
* @param dbName
2621+
* @return true if a database with the given name already exists, false if
2622+
* does not exist.
2623+
* @throws HiveException
2624+
*/
2625+
public boolean databaseExists(String catName, String dbName) throws HiveException {
2626+
return getDatabase(catName, dbName) != null;
2627+
}
2628+
26152629
/**
26162630
* Get the database by name.
26172631
* @param dbName the name of the database.
@@ -2622,7 +2636,7 @@ public Database getDatabase(String dbName) throws HiveException {
26222636
PerfLogger perfLogger = SessionState.getPerfLogger();
26232637
perfLogger.perfLogBegin(CLASS_NAME, PerfLogger.HIVE_GET_DATABASE);
26242638
try {
2625-
return getMSC().getDatabase(SessionState.get().getCurrentCatalog(), dbName);
2639+
return getMSC().getDatabase(dbName);
26262640
} catch (NoSuchObjectException e) {
26272641
return null;
26282642
} catch (Exception e) {

ql/src/test/queries/clientpositive/catalog_database.q

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,21 @@ CREATE DATABASE testcat.testdb_1;
1717
-- Switch the catalog from hive to 'testcat'
1818
SET CATALOG testcat;
1919

20+
-- Check the current catalog, should be testcat.
21+
select current_catalog();
22+
23+
-- Switch database by catalog.db pattern, and the catalog also be changed.
24+
USE hive.default;
25+
26+
-- Check the current catalog, should be hive
27+
select current_catalog();
28+
2029
-- CREATE DATABASE in new catalog testcat
30+
SET CATALOG testcat;
2131
CREATE DATABASE testdb_2;
2232

2333
-- Check databases in catalog 'testcat',
24-
-- The list of databases in the catalog 'hive' should contain default and testdb_1 and testdb_2.
34+
-- The list of databases in the catalog 'testcat' should contain default and testdb_1 and testdb_2.
2535
SHOW DATABASES;
2636

2737
-- Switch database by catalog.db pattern
@@ -31,5 +41,6 @@ USE testcat.testdb_1;
3141
DROP DATABASE testcat.testdb_1;
3242

3343
-- Check databases in catalog 'testcat',
34-
-- The list of databases in the catalog 'hive' should contain default and testdb_2.
44+
-- The list of databases in the catalog 'testcat' should contain default and testdb_2.
3545
SHOW DATABASES;
46+

ql/src/test/results/clientpositive/llap/catalog_database.q.out

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,36 @@ PREHOOK: Input: catalog:testcat
3636
POSTHOOK: query: SET CATALOG testcat
3737
POSTHOOK: type: SWITCHCATALOG
3838
POSTHOOK: Input: catalog:testcat
39+
PREHOOK: query: select current_catalog()
40+
PREHOOK: type: QUERY
41+
PREHOOK: Input: _dummy_database@_dummy_table
42+
PREHOOK: Output: hdfs://### HDFS PATH ###
43+
POSTHOOK: query: select current_catalog()
44+
POSTHOOK: type: QUERY
45+
POSTHOOK: Input: _dummy_database@_dummy_table
46+
POSTHOOK: Output: hdfs://### HDFS PATH ###
47+
testcat
48+
PREHOOK: query: USE hive.default
49+
PREHOOK: type: SWITCHDATABASE
50+
PREHOOK: Input: database:default
51+
POSTHOOK: query: USE hive.default
52+
POSTHOOK: type: SWITCHDATABASE
53+
POSTHOOK: Input: database:default
54+
PREHOOK: query: select current_catalog()
55+
PREHOOK: type: QUERY
56+
PREHOOK: Input: _dummy_database@_dummy_table
57+
PREHOOK: Output: hdfs://### HDFS PATH ###
58+
POSTHOOK: query: select current_catalog()
59+
POSTHOOK: type: QUERY
60+
POSTHOOK: Input: _dummy_database@_dummy_table
61+
POSTHOOK: Output: hdfs://### HDFS PATH ###
62+
hive
63+
PREHOOK: query: SET CATALOG testcat
64+
PREHOOK: type: SWITCHCATALOG
65+
PREHOOK: Input: catalog:testcat
66+
POSTHOOK: query: SET CATALOG testcat
67+
POSTHOOK: type: SWITCHCATALOG
68+
POSTHOOK: Input: catalog:testcat
3969
PREHOOK: query: CREATE DATABASE testdb_2
4070
PREHOOK: type: CREATEDATABASE
4171
PREHOOK: Output: database:testdb_2

0 commit comments

Comments
 (0)