Skip to content

Commit c333b55

Browse files
committed
IMPALA-7257. Support Kudu tables in LocalCatalog
This adds support for querying Kudu tables when --use_local_catalog is enabled. With this change, most of the kudu e2e tests pass. Those that don't are related to missing support for CREATE TABLE AS SELECT, which currently has some downcasts to 'Db' causing issues. That will be addressed in a separate patch along with fixing CTAS for FS-backed tables. Change-Id: I5b6a317ee895e43e00ade953e814867b56b4e6dd Reviewed-on: http://gerrit.cloudera.org:8080/10912 Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Reviewed-by: Tianyi Wang <twang@cloudera.com>
1 parent def5c88 commit c333b55

33 files changed

+697
-343
lines changed

fe/src/main/java/org/apache/impala/analysis/AlterTableAddDropRangePartitionStmt.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import java.util.List;
2121

2222
import org.apache.impala.catalog.Column;
23+
import org.apache.impala.catalog.FeKuduTable;
2324
import org.apache.impala.catalog.FeTable;
24-
import org.apache.impala.catalog.KuduTable;
2525
import org.apache.impala.common.AnalysisException;
2626
import org.apache.impala.thrift.TAlterTableAddDropRangePartitionParams;
2727
import org.apache.impala.thrift.TAlterTableParams;
@@ -88,12 +88,12 @@ public TAlterTableParams toThrift() {
8888
public void analyze(Analyzer analyzer) throws AnalysisException {
8989
super.analyze(analyzer);
9090
FeTable table = getTargetTable();
91-
if (!(table instanceof KuduTable)) {
91+
if (!(table instanceof FeKuduTable)) {
9292
throw new AnalysisException(String.format("Table %s does not support range " +
9393
"partitions: RANGE %s", table.getFullName(), rangePartitionSpec_.toSql()));
9494
}
95-
KuduTable kuduTable = (KuduTable) table;
96-
List<String> colNames = kuduTable.getRangePartitioningColNames();
95+
FeKuduTable kuduTable = (FeKuduTable) table;
96+
List<String> colNames = FeKuduTable.Utils.getRangePartitioningColNames(kuduTable);
9797
if (colNames.isEmpty()) {
9898
throw new AnalysisException(String.format("Cannot add/drop partition %s: " +
9999
"Kudu table %s doesn't have a range-based partitioning.",

fe/src/main/java/org/apache/impala/analysis/AlterTableAddPartitionStmt.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.google.common.base.Joiner;
2222
import com.google.common.collect.Sets;
2323

24+
import org.apache.impala.catalog.FeKuduTable;
2425
import org.apache.impala.catalog.FeTable;
2526
import org.apache.impala.catalog.KuduTable;
2627
import org.apache.impala.common.AnalysisException;
@@ -84,7 +85,7 @@ public TAlterTableParams toThrift() {
8485
public void analyze(Analyzer analyzer) throws AnalysisException {
8586
super.analyze(analyzer);
8687
FeTable table = getTargetTable();
87-
if (table instanceof KuduTable) {
88+
if (table instanceof FeKuduTable) {
8889
throw new AnalysisException("ALTER TABLE ADD PARTITION is not supported for " +
8990
"Kudu tables: " + table.getTableName());
9091
}

fe/src/main/java/org/apache/impala/analysis/AlterTableAddReplaceColsStmt.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import org.apache.hadoop.hive.metastore.api.FieldSchema;
2424

2525
import org.apache.impala.catalog.Column;
26+
import org.apache.impala.catalog.FeKuduTable;
2627
import org.apache.impala.catalog.FeTable;
2728
import org.apache.impala.catalog.HBaseTable;
28-
import org.apache.impala.catalog.KuduTable;
2929
import org.apache.impala.common.AnalysisException;
3030
import org.apache.impala.thrift.TAlterTableAddReplaceColsParams;
3131
import org.apache.impala.thrift.TAlterTableParams;
@@ -80,7 +80,7 @@ public void analyze(Analyzer analyzer) throws AnalysisException {
8080
"supported on HBase tables.");
8181
}
8282

83-
boolean isKuduTable = t instanceof KuduTable;
83+
boolean isKuduTable = t instanceof FeKuduTable;
8484
if (isKuduTable && replaceExistingCols_) {
8585
throw new AnalysisException("ALTER TABLE REPLACE COLUMNS is not " +
8686
"supported on Kudu tables.");

fe/src/main/java/org/apache/impala/analysis/AlterTableAlterColStmt.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
import java.util.Map;
2121

2222
import org.apache.impala.catalog.Column;
23+
import org.apache.impala.catalog.FeKuduTable;
2324
import org.apache.impala.catalog.FeTable;
2425
import org.apache.impala.catalog.HBaseTable;
2526
import org.apache.impala.catalog.KuduColumn;
26-
import org.apache.impala.catalog.KuduTable;
2727
import org.apache.impala.common.AnalysisException;
2828
import org.apache.impala.thrift.TAlterTableAlterColParams;
2929
import org.apache.impala.thrift.TAlterTableParams;
@@ -134,7 +134,7 @@ public void analyze(Analyzer analyzer) throws AnalysisException {
134134
}
135135
if (newColDef_.hasKuduOptions()) {
136136
// Disallow Kudu options on non-Kudu tables.
137-
if (!(t instanceof KuduTable)) {
137+
if (!(t instanceof FeKuduTable)) {
138138
if (isDropDefault_) {
139139
throw new AnalysisException(String.format(
140140
"Unsupported column option for non-Kudu table: DROP DEFAULT"));
@@ -153,7 +153,7 @@ public void analyze(Analyzer analyzer) throws AnalysisException {
153153
newColDef_.toString()));
154154
}
155155
}
156-
if (t instanceof KuduTable) {
156+
if (t instanceof FeKuduTable) {
157157
KuduColumn col = (KuduColumn) t.getColumn(colName_);
158158
if (!col.getType().equals(newColDef_.getType())) {
159159
throw new AnalysisException(String.format("Cannot change the type of a Kudu " +

fe/src/main/java/org/apache/impala/analysis/AlterTableDropPartitionStmt.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
package org.apache.impala.analysis;
1919

2020
import org.apache.impala.authorization.Privilege;
21+
import org.apache.impala.catalog.FeKuduTable;
2122
import org.apache.impala.catalog.FeTable;
22-
import org.apache.impala.catalog.KuduTable;
2323
import org.apache.impala.common.AnalysisException;
2424
import org.apache.impala.thrift.TAlterTableDropPartitionParams;
2525
import org.apache.impala.thrift.TAlterTableParams;
@@ -75,7 +75,7 @@ public TAlterTableParams toThrift() {
7575
public void analyze(Analyzer analyzer) throws AnalysisException {
7676
super.analyze(analyzer);
7777
FeTable table = getTargetTable();
78-
if (table instanceof KuduTable) {
78+
if (table instanceof FeKuduTable) {
7979
throw new AnalysisException("ALTER TABLE DROP PARTITION is not supported for " +
8080
"Kudu tables: " + partitionSet_.toSql());
8181
}

fe/src/main/java/org/apache/impala/analysis/AlterTableSetFileFormatStmt.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
package org.apache.impala.analysis;
1919

20+
import org.apache.impala.catalog.FeKuduTable;
2021
import org.apache.impala.catalog.FeTable;
21-
import org.apache.impala.catalog.KuduTable;
2222
import org.apache.impala.common.AnalysisException;
2323
import org.apache.impala.thrift.TAlterTableParams;
2424
import org.apache.impala.thrift.TAlterTableSetFileFormatParams;
@@ -56,7 +56,7 @@ public TAlterTableParams toThrift() {
5656
public void analyze(Analyzer analyzer) throws AnalysisException {
5757
super.analyze(analyzer);
5858
FeTable tbl = getTargetTable();
59-
if (tbl instanceof KuduTable) {
59+
if (tbl instanceof FeKuduTable) {
6060
throw new AnalysisException("ALTER TABLE SET FILEFORMAT is not supported " +
6161
"on Kudu tables: " + tbl.getFullName());
6262
}

fe/src/main/java/org/apache/impala/analysis/AlterTableSetLocationStmt.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
import org.apache.hadoop.fs.permission.FsAction;
2424
import org.apache.impala.authorization.Privilege;
2525
import org.apache.impala.catalog.FeFsPartition;
26+
import org.apache.impala.catalog.FeKuduTable;
2627
import org.apache.impala.catalog.FeTable;
2728
import org.apache.impala.catalog.HdfsPartition;
2829
import org.apache.impala.catalog.HdfsTable;
29-
import org.apache.impala.catalog.KuduTable;
3030
import org.apache.impala.common.AnalysisException;
3131
import org.apache.impala.thrift.TAlterTableParams;
3232
import org.apache.impala.thrift.TAlterTableSetLocationParams;
@@ -111,7 +111,7 @@ public String apply(FeFsPartition hdfsPartition) {
111111
"uncache before changing the location using: ALTER TABLE %s SET UNCACHED",
112112
table.getFullName()));
113113
}
114-
} else if (table instanceof KuduTable) {
114+
} else if (table instanceof FeKuduTable) {
115115
throw new AnalysisException("ALTER TABLE SET LOCATION is not supported on Kudu " +
116116
"tables: " + table.getFullName());
117117
}

fe/src/main/java/org/apache/impala/analysis/AlterTableSetTblProperties.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.impala.authorization.PrivilegeRequestBuilder;
2828
import org.apache.impala.catalog.Column;
2929
import org.apache.impala.catalog.FeFsTable;
30+
import org.apache.impala.catalog.FeKuduTable;
3031
import org.apache.impala.catalog.FeTable;
3132
import org.apache.impala.catalog.HBaseTable;
3233
import org.apache.impala.catalog.HdfsTable;
@@ -93,7 +94,7 @@ public void analyze(Analyzer analyzer) throws AnalysisException {
9394
hive_metastoreConstants.META_TABLE_STORAGE));
9495
}
9596

96-
if (getTargetTable() instanceof KuduTable) analyzeKuduTable(analyzer);
97+
if (getTargetTable() instanceof FeKuduTable) analyzeKuduTable(analyzer);
9798

9899
// Check avro schema when it is set in avro.schema.url or avro.schema.literal to
99100
// avoid potential metadata corruption (see IMPALA-2042).
@@ -211,7 +212,7 @@ public static List<Integer> analyzeSortColumns(FeTable table,
211212
// AlterTableSetStmt::analyze().
212213
Preconditions.checkState(!(table instanceof HBaseTable));
213214

214-
if (table instanceof KuduTable) {
215+
if (table instanceof FeKuduTable) {
215216
throw new AnalysisException(String.format("'%s' table property is not supported " +
216217
"for Kudu tables.", AlterTableSortByStmt.TBL_PROP_SORT_COLUMNS));
217218
}

fe/src/main/java/org/apache/impala/analysis/AlterTableSortByStmt.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import java.util.List;
2121
import java.util.Map;
2222

23+
import org.apache.impala.catalog.FeKuduTable;
2324
import org.apache.impala.catalog.FeTable;
2425
import org.apache.impala.catalog.HBaseTable;
25-
import org.apache.impala.catalog.KuduTable;
2626
import org.apache.impala.common.AnalysisException;
2727
import org.apache.impala.thrift.TAlterTableParams;
2828
import org.apache.impala.thrift.TAlterTableSetTblPropertiesParams;
@@ -71,7 +71,7 @@ public void analyze(Analyzer analyzer) throws AnalysisException {
7171
if (targetTable instanceof HBaseTable) {
7272
throw new AnalysisException("ALTER TABLE SORT BY not supported on HBase tables.");
7373
}
74-
if (targetTable instanceof KuduTable) {
74+
if (targetTable instanceof FeKuduTable) {
7575
throw new AnalysisException("ALTER TABLE SORT BY not supported on Kudu tables.");
7676
}
7777

fe/src/main/java/org/apache/impala/analysis/Analyzer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,16 @@
3838
import org.apache.impala.authorization.PrivilegeRequestBuilder;
3939
import org.apache.impala.authorization.User;
4040
import org.apache.impala.catalog.Column;
41-
import org.apache.impala.catalog.DataSourceTable;
4241
import org.apache.impala.catalog.DatabaseNotFoundException;
4342
import org.apache.impala.catalog.FeCatalog;
4443
import org.apache.impala.catalog.FeDataSourceTable;
4544
import org.apache.impala.catalog.FeDb;
4645
import org.apache.impala.catalog.FeFsTable;
46+
import org.apache.impala.catalog.FeKuduTable;
4747
import org.apache.impala.catalog.FeTable;
4848
import org.apache.impala.catalog.FeView;
4949
import org.apache.impala.catalog.HBaseTable;
5050
import org.apache.impala.catalog.IncompleteTable;
51-
import org.apache.impala.catalog.KuduTable;
5251
import org.apache.impala.catalog.TableLoadingException;
5352
import org.apache.impala.catalog.Type;
5453
import org.apache.impala.common.AnalysisException;
@@ -589,7 +588,7 @@ public TableRef resolveTableRef(TableRef tableRef) throws AnalysisException {
589588
if (table instanceof FeView) return new InlineViewRef((FeView) table, tableRef);
590589
// The table must be a base table.
591590
Preconditions.checkState(table instanceof FeFsTable ||
592-
table instanceof KuduTable ||
591+
table instanceof FeKuduTable ||
593592
table instanceof HBaseTable ||
594593
table instanceof FeDataSourceTable);
595594
return new BaseTableRef(tableRef, resolvedPath);

0 commit comments

Comments
 (0)