diff --git a/data/files/single_int.txt b/data/files/single_int.txt new file mode 100644 index 0000000..274c005 --- /dev/null +++ b/data/files/single_int.txt @@ -0,0 +1 @@ +1234 \ No newline at end of file diff --git a/itests/hive-blobstore/src/test/queries/clientpositive/create_database.q b/itests/hive-blobstore/src/test/queries/clientpositive/create_database.q new file mode 100644 index 0000000..66faf6c --- /dev/null +++ b/itests/hive-blobstore/src/test/queries/clientpositive/create_database.q @@ -0,0 +1,41 @@ +-- Test tables with location inherited from database + +CREATE DATABASE db_with_location LOCATION '${hiveconf:test.blobstore.path.unique}/create_database/db_with_location/'; +USE db_with_location; +SHOW TABLES; + +DROP TABLE events; +DROP TABLE test_table; + +CREATE TABLE test_table (col1 STRING) STORED AS TEXTFILE; +SHOW TABLES; + +CREATE EXTERNAL TABLE events( + userUid STRING, + trackingId STRING, + eventType STRING, + action STRING, + url STRING) +PARTITIONED BY (dt STRING) +ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '; + +dfs -mkdir -p ${hiveconf:test.blobstore.path.unique}/create_database/db_with_location/events/dt=2010-12-08; +dfs -copyFromLocal ../../data/files/5col_data.txt ${hiveconf:test.blobstore.path.unique}/create_database/db_with_location/events/dt=2010-12-08/; + +MSCK REPAIR TABLE events; + +SHOW TABLES; + +SHOW PARTITIONS events; + +DROP TABLE events; + +USE DEFAULT; + +SHOW TABLES from db_with_location; + +USE db_with_location; +DROP TABLE test_table; + +DROP database db_with_location; +USE DEFAULT; diff --git a/itests/hive-blobstore/src/test/queries/clientpositive/explain.q b/itests/hive-blobstore/src/test/queries/clientpositive/explain.q new file mode 100644 index 0000000..8185017 --- /dev/null +++ b/itests/hive-blobstore/src/test/queries/clientpositive/explain.q @@ -0,0 +1,10 @@ +-- Tests EXPLAIN INSERT OVERWRITE command + +DROP TABLE blobstore_table; +CREATE TABLE blobstore_table (cnt INT) +LOCATION '${hiveconf:test.blobstore.path.unique}/explain/blobstore_table'; +LOAD DATA LOCAL INPATH '../../data/files/single_int.txt' INTO TABLE blobstore_table; + +SELECT * FROM blobstore_table; +EXPLAIN INSERT OVERWRITE TABLE blobstore_table SELECT count(1) FROM blobstore_table; +SELECT * FROM blobstore_table; diff --git a/itests/hive-blobstore/src/test/queries/clientpositive/multiple_db.q b/itests/hive-blobstore/src/test/queries/clientpositive/multiple_db.q new file mode 100644 index 0000000..f92a665 --- /dev/null +++ b/itests/hive-blobstore/src/test/queries/clientpositive/multiple_db.q @@ -0,0 +1,35 @@ +-- Query spanning multiple databases + +DROP DATABASE IF EXISTS db1; +DROP DATABASE IF EXISTS db2; + +CREATE DATABASE db1 LOCATION '${hiveconf:test.blobstore.path.unique}/multiple_db/db1'; +CREATE DATABASE db2 LOCATION '${hiveconf:test.blobstore.path.unique}/multiple_db/db2'; + +USE db1; + +DROP TABLE test_db1_tbl; +CREATE TABLE test_db1_tbl ( + a INT, + b STRING, + value DOUBLE) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ' ' +LINES TERMINATED BY '\n'; +LOAD DATA LOCAL INPATH '../../data/files/3col_data.txt' INTO TABLE test_db1_tbl; + +USE db2; + +DROP TABLE test_db2_tbl; +CREATE TABLE test_db2_tbl (a INT); +LOAD DATA LOCAL INPATH '../../data/files/single_int.txt' INTO TABLE test_db2_tbl; + +SELECT * FROM test_db2_tbl; + +SELECT * FROM db1.test_db1_tbl; + +DROP TABLE test_db2_tbl; + +USE db1; + +DROP TABLE test_db1_tbl; \ No newline at end of file diff --git a/itests/hive-blobstore/src/test/results/clientpositive/create_database.q.out b/itests/hive-blobstore/src/test/results/clientpositive/create_database.q.out new file mode 100644 index 0000000..584ddcc --- /dev/null +++ b/itests/hive-blobstore/src/test/results/clientpositive/create_database.q.out @@ -0,0 +1,137 @@ +#### A masked pattern was here #### +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:db_with_location +PREHOOK: Output: ### test.blobstore.path ###/create_database/db_with_location +#### A masked pattern was here #### +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:db_with_location +POSTHOOK: Output: ### test.blobstore.path ###/create_database/db_with_location +PREHOOK: query: USE db_with_location +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:db_with_location +POSTHOOK: query: USE db_with_location +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:db_with_location +PREHOOK: query: SHOW TABLES +PREHOOK: type: SHOWTABLES +PREHOOK: Input: database:db_with_location +POSTHOOK: query: SHOW TABLES +POSTHOOK: type: SHOWTABLES +POSTHOOK: Input: database:db_with_location +PREHOOK: query: DROP TABLE events +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE events +POSTHOOK: type: DROPTABLE +PREHOOK: query: DROP TABLE test_table +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE test_table +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE test_table (col1 STRING) STORED AS TEXTFILE +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:db_with_location +PREHOOK: Output: db_with_location@test_table +POSTHOOK: query: CREATE TABLE test_table (col1 STRING) STORED AS TEXTFILE +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:db_with_location +POSTHOOK: Output: db_with_location@test_table +PREHOOK: query: SHOW TABLES +PREHOOK: type: SHOWTABLES +PREHOOK: Input: database:db_with_location +POSTHOOK: query: SHOW TABLES +POSTHOOK: type: SHOWTABLES +POSTHOOK: Input: database:db_with_location +test_table +PREHOOK: query: CREATE EXTERNAL TABLE events( + userUid STRING, + trackingId STRING, + eventType STRING, + action STRING, + url STRING) +PARTITIONED BY (dt STRING) +ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:db_with_location +PREHOOK: Output: db_with_location@events +POSTHOOK: query: CREATE EXTERNAL TABLE events( + userUid STRING, + trackingId STRING, + eventType STRING, + action STRING, + url STRING) +PARTITIONED BY (dt STRING) +ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:db_with_location +POSTHOOK: Output: db_with_location@events +PREHOOK: query: MSCK REPAIR TABLE events +PREHOOK: type: MSCK +PREHOOK: Output: db_with_location@events +POSTHOOK: query: MSCK REPAIR TABLE events +POSTHOOK: type: MSCK +POSTHOOK: Output: db_with_location@events +Partitions not in metastore: events:dt=2010-12-08 +#### A masked pattern was here #### +PREHOOK: query: SHOW TABLES +PREHOOK: type: SHOWTABLES +PREHOOK: Input: database:db_with_location +POSTHOOK: query: SHOW TABLES +POSTHOOK: type: SHOWTABLES +POSTHOOK: Input: database:db_with_location +events +test_table +PREHOOK: query: SHOW PARTITIONS events +PREHOOK: type: SHOWPARTITIONS +PREHOOK: Input: db_with_location@events +POSTHOOK: query: SHOW PARTITIONS events +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Input: db_with_location@events +dt=2010-12-08 +PREHOOK: query: DROP TABLE events +PREHOOK: type: DROPTABLE +PREHOOK: Input: db_with_location@events +PREHOOK: Output: db_with_location@events +POSTHOOK: query: DROP TABLE events +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: db_with_location@events +POSTHOOK: Output: db_with_location@events +PREHOOK: query: USE DEFAULT +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:default +POSTHOOK: query: USE DEFAULT +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:default +PREHOOK: query: SHOW TABLES from db_with_location +PREHOOK: type: SHOWTABLES +PREHOOK: Input: database:db_with_location +POSTHOOK: query: SHOW TABLES from db_with_location +POSTHOOK: type: SHOWTABLES +POSTHOOK: Input: database:db_with_location +test_table +PREHOOK: query: USE db_with_location +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:db_with_location +POSTHOOK: query: USE db_with_location +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:db_with_location +PREHOOK: query: DROP TABLE test_table +PREHOOK: type: DROPTABLE +PREHOOK: Input: db_with_location@test_table +PREHOOK: Output: db_with_location@test_table +POSTHOOK: query: DROP TABLE test_table +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: db_with_location@test_table +POSTHOOK: Output: db_with_location@test_table +PREHOOK: query: DROP database db_with_location +PREHOOK: type: DROPDATABASE +PREHOOK: Input: database:db_with_location +PREHOOK: Output: database:db_with_location +POSTHOOK: query: DROP database db_with_location +POSTHOOK: type: DROPDATABASE +POSTHOOK: Input: database:db_with_location +POSTHOOK: Output: database:db_with_location +PREHOOK: query: USE DEFAULT +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:default +POSTHOOK: query: USE DEFAULT +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:default diff --git a/itests/hive-blobstore/src/test/results/clientpositive/explain.q.out b/itests/hive-blobstore/src/test/results/clientpositive/explain.q.out new file mode 100644 index 0000000..09197f9 --- /dev/null +++ b/itests/hive-blobstore/src/test/results/clientpositive/explain.q.out @@ -0,0 +1,101 @@ +PREHOOK: query: DROP TABLE blobstore_table +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE blobstore_table +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE blobstore_table (cnt INT) +#### A masked pattern was here #### +PREHOOK: type: CREATETABLE +PREHOOK: Input: ### test.blobstore.path ###/explain/blobstore_table +PREHOOK: Output: database:default +PREHOOK: Output: default@blobstore_table +POSTHOOK: query: CREATE TABLE blobstore_table (cnt INT) +#### A masked pattern was here #### +POSTHOOK: type: CREATETABLE +POSTHOOK: Input: ### test.blobstore.path ###/explain/blobstore_table +POSTHOOK: Output: database:default +POSTHOOK: Output: default@blobstore_table +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/single_int.txt' INTO TABLE blobstore_table +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@blobstore_table +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/single_int.txt' INTO TABLE blobstore_table +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@blobstore_table +PREHOOK: query: SELECT * FROM blobstore_table +PREHOOK: type: QUERY +PREHOOK: Input: default@blobstore_table +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM blobstore_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@blobstore_table +#### A masked pattern was here #### +1234 +PREHOOK: query: EXPLAIN INSERT OVERWRITE TABLE blobstore_table SELECT count(1) FROM blobstore_table +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN INSERT OVERWRITE TABLE blobstore_table SELECT count(1) FROM blobstore_table +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + Stage-2 depends on stages: Stage-0 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: blobstore_table + Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE Column stats: COMPLETE + Group By Operator + aggregations: count() + mode: hash + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + sort order: + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: _col0 (type: bigint) + Reduce Operator Tree: + Group By Operator + aggregations: count(VALUE._col0) + mode: mergepartial + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: UDFToInteger(_col0) (type: int) + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + Statistics: Num rows: 1 Data size: 4 Basic stats: COMPLETE Column stats: COMPLETE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.blobstore_table + + Stage: Stage-0 + Move Operator + tables: + replace: true + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: default.blobstore_table + + Stage: Stage-2 + Stats-Aggr Operator + +PREHOOK: query: SELECT * FROM blobstore_table +PREHOOK: type: QUERY +PREHOOK: Input: default@blobstore_table +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM blobstore_table +POSTHOOK: type: QUERY +POSTHOOK: Input: default@blobstore_table +#### A masked pattern was here #### +1234 diff --git a/itests/hive-blobstore/src/test/results/clientpositive/multiple_db.q.out b/itests/hive-blobstore/src/test/results/clientpositive/multiple_db.q.out new file mode 100644 index 0000000..28c41e1 --- /dev/null +++ b/itests/hive-blobstore/src/test/results/clientpositive/multiple_db.q.out @@ -0,0 +1,134 @@ +PREHOOK: query: DROP DATABASE IF EXISTS db1 +PREHOOK: type: DROPDATABASE +POSTHOOK: query: DROP DATABASE IF EXISTS db1 +POSTHOOK: type: DROPDATABASE +PREHOOK: query: DROP DATABASE IF EXISTS db2 +PREHOOK: type: DROPDATABASE +POSTHOOK: query: DROP DATABASE IF EXISTS db2 +POSTHOOK: type: DROPDATABASE +#### A masked pattern was here #### +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:db1 +PREHOOK: Output: ### test.blobstore.path ###/multiple_db/db1 +#### A masked pattern was here #### +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:db1 +POSTHOOK: Output: ### test.blobstore.path ###/multiple_db/db1 +#### A masked pattern was here #### +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:db2 +PREHOOK: Output: ### test.blobstore.path ###/multiple_db/db2 +#### A masked pattern was here #### +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:db2 +POSTHOOK: Output: ### test.blobstore.path ###/multiple_db/db2 +PREHOOK: query: USE db1 +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:db1 +POSTHOOK: query: USE db1 +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:db1 +PREHOOK: query: DROP TABLE test_db1_tbl +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE test_db1_tbl +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE test_db1_tbl ( + a INT, + b STRING, + value DOUBLE) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ' ' +LINES TERMINATED BY '\n' +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:db1 +PREHOOK: Output: db1@test_db1_tbl +POSTHOOK: query: CREATE TABLE test_db1_tbl ( + a INT, + b STRING, + value DOUBLE) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ' ' +LINES TERMINATED BY '\n' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:db1 +POSTHOOK: Output: db1@test_db1_tbl +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/3col_data.txt' INTO TABLE test_db1_tbl +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: db1@test_db1_tbl +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/3col_data.txt' INTO TABLE test_db1_tbl +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: db1@test_db1_tbl +PREHOOK: query: USE db2 +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:db2 +POSTHOOK: query: USE db2 +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:db2 +PREHOOK: query: DROP TABLE test_db2_tbl +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE test_db2_tbl +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE test_db2_tbl (a INT) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:db2 +PREHOOK: Output: db2@test_db2_tbl +POSTHOOK: query: CREATE TABLE test_db2_tbl (a INT) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:db2 +POSTHOOK: Output: db2@test_db2_tbl +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/single_int.txt' INTO TABLE test_db2_tbl +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: db2@test_db2_tbl +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/single_int.txt' INTO TABLE test_db2_tbl +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: db2@test_db2_tbl +PREHOOK: query: SELECT * FROM test_db2_tbl +PREHOOK: type: QUERY +PREHOOK: Input: db2@test_db2_tbl +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM test_db2_tbl +POSTHOOK: type: QUERY +POSTHOOK: Input: db2@test_db2_tbl +#### A masked pattern was here #### +1234 +PREHOOK: query: SELECT * FROM db1.test_db1_tbl +PREHOOK: type: QUERY +PREHOOK: Input: db1@test_db1_tbl +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM db1.test_db1_tbl +POSTHOOK: type: QUERY +POSTHOOK: Input: db1@test_db1_tbl +#### A masked pattern was here #### +1 abc 10.5 +2 def 11.5 +3 ajss 90.23232 +4 djns 89.02002 +5 random 2.99 +6 data 3.002 +7 ne 71.9084 +PREHOOK: query: DROP TABLE test_db2_tbl +PREHOOK: type: DROPTABLE +PREHOOK: Input: db2@test_db2_tbl +PREHOOK: Output: db2@test_db2_tbl +POSTHOOK: query: DROP TABLE test_db2_tbl +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: db2@test_db2_tbl +POSTHOOK: Output: db2@test_db2_tbl +PREHOOK: query: USE db1 +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:db1 +POSTHOOK: query: USE db1 +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:db1 +PREHOOK: query: DROP TABLE test_db1_tbl +PREHOOK: type: DROPTABLE +PREHOOK: Input: db1@test_db1_tbl +PREHOOK: Output: db1@test_db1_tbl +POSTHOOK: query: DROP TABLE test_db1_tbl +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: db1@test_db1_tbl +POSTHOOK: Output: db1@test_db1_tbl