diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java index d68d646eb4..fb555639fb 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java @@ -1911,6 +1911,15 @@ public static int getBucketIdFromFile(String bucketName) { return -1; } + public static int getBucketIdFromFile(Path path) { + String bucketName = path.getName(); + + //get the bucket id + String bucketIdStr = + Utilities.getBucketFileNameFromPathSubString(bucketName); + return Utilities.getBucketIdFromFile(bucketIdStr); + } + public static String getNameMessage(Throwable e) { return e.getClass().getName() + "(" + e.getMessage() + ")"; } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java index 1a2b3c1f6c..051b5d193a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java @@ -1881,7 +1881,7 @@ else if(!isAcidIUDoperation && isFullAcidTable) { } else { FileSystem fs = tbl.getDataLocation().getFileSystem(conf); copyFiles(conf, loadPath, destPath, fs, isSrcLocal, isAcidIUDoperation, - (loadFileType == LoadFileType.OVERWRITE_EXISTING), newFiles); + (loadFileType == LoadFileType.OVERWRITE_EXISTING), newFiles, isFullAcidTable); } } perfLogger.PerfLogEnd("MoveTask", "FileMoves"); @@ -2427,7 +2427,7 @@ else if(!isAcidIUDoperation && isFullAcidTable) { try { FileSystem fs = tbl.getDataLocation().getFileSystem(sessionConf); copyFiles(sessionConf, loadPath, destPath, fs, isSrcLocal, isAcidIUDoperation, - loadFileType == LoadFileType.OVERWRITE_EXISTING, newFiles); + loadFileType == LoadFileType.OVERWRITE_EXISTING, newFiles, isFullAcidTable); } catch (IOException e) { throw new HiveException("addFiles: filesystem error in check phase", e); } @@ -3284,8 +3284,9 @@ public PrincipalPrivilegeSet get_privilege_set(HiveObjectType objectType, } private static void copyFiles(final HiveConf conf, final FileSystem destFs, - FileStatus[] srcs, final FileSystem srcFs, final Path destf, final boolean isSrcLocal, - boolean isOverwrite, final List newFiles) throws HiveException { + FileStatus[] srcs, final FileSystem srcFs, final Path destf, + final boolean isSrcLocal, boolean isOverwrite, + final List newFiles, boolean isFullAcidTable) throws HiveException { final HdfsUtils.HadoopFileStatus fullDestStatus; try { @@ -3301,6 +3302,7 @@ private static void copyFiles(final HiveConf conf, final FileSystem destFs, final ExecutorService pool = conf.getInt(ConfVars.HIVE_MOVE_FILES_THREAD_COUNT.varname, 25) > 0 ? Executors.newFixedThreadPool(conf.getInt(ConfVars.HIVE_MOVE_FILES_THREAD_COUNT.varname, 25), new ThreadFactoryBuilder().setDaemon(true).setNameFormat("Move-Thread-%d").build()) : null; + int taskId = 0; for (FileStatus src : srcs) { FileStatus[] files; if (src.isDirectory()) { @@ -3328,7 +3330,8 @@ private static void copyFiles(final HiveConf conf, final FileSystem destFs, // copy from source to destination, we will inherit the destination's parent group ownership. if (null == pool) { try { - Path destPath = mvFile(conf, srcFs, srcP, destFs, destf, isSrcLocal, isOverwrite, isRenameAllowed); + Path destPath = mvFile(conf, srcFs, srcP, destFs, destf, isSrcLocal, isOverwrite, isRenameAllowed, + isFullAcidTable ? taskId++ : -1); if (null != newFiles) { newFiles.add(destPath); @@ -3337,6 +3340,8 @@ private static void copyFiles(final HiveConf conf, final FileSystem destFs, throw getHiveException(e, msg, "Failed to move: {}"); } } else { + // future only takes final or seemingly final values. Make a final copy of taskId + final int finalTaskId = isFullAcidTable ? taskId++ : -1; futures.add(pool.submit(new Callable>() { @Override public ObjectPair call() throws HiveException { @@ -3344,7 +3349,7 @@ private static void copyFiles(final HiveConf conf, final FileSystem destFs, try { Path destPath = - mvFile(conf, srcFs, srcP, destFs, destf, isSrcLocal, isOverwrite, isRenameAllowed); + mvFile(conf, srcFs, srcP, destFs, destf, isSrcLocal, isOverwrite, isRenameAllowed, finalTaskId); if (null != newFiles) { newFiles.add(destPath); @@ -3414,6 +3419,10 @@ private static Path getQualifiedPathWithoutSchemeAndAuthority(Path srcf, FileSys return ShimLoader.getHadoopShims().getPathWithoutSchemeAndAuthority(path); } + private static String getPathName(int taskId) { + return Utilities.replaceTaskId("000000", taskId) + "_0"; + } + /** *

* Moves a file from one {@link Path} to another. If {@code isRenameAllowed} is true then the @@ -3441,15 +3450,21 @@ private static Path getQualifiedPathWithoutSchemeAndAuthority(Path srcf, FileSys * @throws IOException if there was an issue moving the file */ private static Path mvFile(HiveConf conf, FileSystem sourceFs, Path sourcePath, FileSystem destFs, Path destDirPath, - boolean isSrcLocal, boolean isOverwrite, boolean isRenameAllowed) throws IOException { + boolean isSrcLocal, boolean isOverwrite, boolean isRenameAllowed, + int taskId) throws IOException { // Strip off the file type, if any so we don't make: // 000000_0.gz -> 000000_0.gz_copy_1 final String fullname = sourcePath.getName(); - final String name = FilenameUtils.getBaseName(sourcePath.getName()); + final String name; + if (taskId == -1) { // non-acid + name = FilenameUtils.getBaseName(sourcePath.getName()); + } else { // acid + name = getPathName(taskId); + } final String type = FilenameUtils.getExtension(sourcePath.getName()); - Path destFilePath = new Path(destDirPath, fullname); + Path destFilePath = new Path(destDirPath, taskId == -1 ? fullname : name); /* * The below loop may perform bad when the destination file already exists and it has too many _copy_ @@ -3759,7 +3774,8 @@ static protected boolean needToCopy(Path srcf, Path destf, FileSystem srcFs, Fil */ static protected void copyFiles(HiveConf conf, Path srcf, Path destf, FileSystem fs, boolean isSrcLocal, boolean isAcid, - boolean isOverwrite, List newFiles) throws HiveException { + boolean isOverwrite, List newFiles, + boolean isFullAcidTable) throws HiveException { try { // create the destination if it does not exist if (!fs.exists(destf)) { @@ -3791,7 +3807,8 @@ static protected void copyFiles(HiveConf conf, Path srcf, Path destf, FileSystem if (isAcid) { moveAcidFiles(srcFs, srcs, destf, newFiles); } else { - copyFiles(conf, fs, srcs, srcFs, destf, isSrcLocal, isOverwrite, newFiles); + copyFiles(conf, fs, srcs, srcFs, destf, isSrcLocal, isOverwrite, + newFiles, isFullAcidTable); } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java index a7fc3e9e7f..e601fcfc06 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java @@ -91,6 +91,23 @@ abstract public Object process(Node nd, Stack stack, NodeProcessorCtx proc return fileNames; } + public static List getBucketPathsOfPartition( + Path location, ParseContext pGraphContext) throws SemanticException { + List filePaths = new ArrayList<>(); + try { + FileSystem fs = location.getFileSystem(pGraphContext.getConf()); + FileStatus[] files = fs.listStatus(new Path(location.toString()), FileUtils.HIDDEN_FILES_PATH_FILTER); + if (files != null) { + for (FileStatus file : files) { + filePaths.add(file.getPath()); + } + } + } catch (IOException e) { + throw new SemanticException(e); + } + return filePaths; + } + // This function checks whether all bucketing columns are also in join keys and are in same order private boolean checkBucketColumns(List bucketColumns, List joinKeys, diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/metainfo/annotation/OpTraitsRulesProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/metainfo/annotation/OpTraitsRulesProcFactory.java index 5933328b22..a412b6d5dd 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/metainfo/annotation/OpTraitsRulesProcFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/metainfo/annotation/OpTraitsRulesProcFactory.java @@ -21,14 +21,10 @@ import java.util.*; import java.util.Map.Entry; +import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.api.Order; -import org.apache.hadoop.hive.ql.exec.GroupByOperator; -import org.apache.hadoop.hive.ql.exec.JoinOperator; -import org.apache.hadoop.hive.ql.exec.Operator; -import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; -import org.apache.hadoop.hive.ql.exec.SelectOperator; -import org.apache.hadoop.hive.ql.exec.TableScanOperator; +import org.apache.hadoop.hive.ql.exec.*; import org.apache.hadoop.hive.ql.lib.Node; import org.apache.hadoop.hive.ql.lib.NodeProcessor; import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx; @@ -40,6 +36,8 @@ import org.apache.hadoop.hive.ql.parse.PrunedPartitionList; import org.apache.hadoop.hive.ql.parse.SemanticException; import org.apache.hadoop.hive.ql.plan.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /* * This class populates the following operator traits for the entire operator tree: @@ -64,6 +62,8 @@ public class OpTraitsRulesProcFactory { + static final private Logger LOG = LoggerFactory.getLogger("hive.ql.metadata.Hive") + ; public static class DefaultRule implements NodeProcessor { @Override @@ -181,6 +181,44 @@ public boolean checkBucketedTable(Table tbl, ParseContext pGraphContext, return false; } } + } else { + // The files should be in format 000000_0, 000001_0_copy_2 etc. + // This helps is determining to which bucket it belongs to. + if (tbl.isPartitioned()) { + List partitions = prunedParts.getNotDeniedPartns(); + // construct a mapping of (Partition->bucket file names) and (Partition -> bucket number) + if (!partitions.isEmpty()) { + for (Partition p : partitions) { + List filePaths = + AbstractBucketJoinProc.getBucketPathsOfPartition(p.getDataLocation(), + pGraphContext); + for (Path path : filePaths) { + if (Utilities.getBucketIdFromFile(path) == -1) { + // The file does not match the name format + LOG.warn("Bucket Map Join or SMB Join can't be performed" + + " on Table " + tbl.getFullyQualifiedName() + + " because one or more bucket files name is not of format" + + "000000_0 or 000001_0_copy_2. Please check documentation"); + return false; + } + } + } + } + } else { + List filePaths = + AbstractBucketJoinProc.getBucketPathsOfPartition(tbl.getDataLocation(), + pGraphContext); + for (Path path : filePaths) { + if (Utilities.getBucketIdFromFile(path) == -1) { + // The file does not match the name format + LOG.warn("Bucket Map Join or SMB Join can't be performed" + + " on Table " + tbl.getFullyQualifiedName() + + " because one or more bucket files name is not of format" + + "000000_0 or 000001_0_copy_2. Please check documentation"); + return false; + } + } + } } return true; } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java index 4535c3edc2..b54397ada2 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java @@ -159,12 +159,18 @@ private URI initializeFromURI(String fromPath, boolean isLocal) throws IOExcepti throw new SemanticException(ErrorMsg.INVALID_PATH.getMsg(ast, "source contains directory: " + oneSrc.getPath().toString())); } - if(AcidUtils.isAcidTable(table)) { - if(!AcidUtils.originalBucketFilter.accept(oneSrc.getPath())) { - //acid files (e.g. bucket_0000) have ROW_ID embedded in them and so can't be simply - //copied to a table so only allow non-acid files for now - throw new SemanticException(ErrorMsg.ACID_LOAD_DATA_INVALID_FILE_NAME, - oneSrc.getPath().getName(), table.getFullyQualifiedName()); + } + // Do another loop if table is bucketed + List bucketCols = table.getBucketCols(); + if (bucketCols != null && !bucketCols.isEmpty()) { + for (FileStatus oneSrc : srcs) { + int bucketId = Utilities.getBucketIdFromFile(oneSrc.getPath()); + LOG.info("bucket ID for file " + oneSrc.getPath() + " = " + bucketId + + " for table " + table.getFullyQualifiedName()); + if (bucketId == -1) { + LOG.warn("The file name is invalid : " + + oneSrc.getPath().toString() + " for table " + + table.getFullyQualifiedName()); } } } diff --git a/ql/src/test/queries/clientnegative/load_data_bucketed_1.q b/ql/src/test/queries/clientnegative/load_data_bucketed_1.q new file mode 100644 index 0000000000..616e2d49db --- /dev/null +++ b/ql/src/test/queries/clientnegative/load_data_bucketed_1.q @@ -0,0 +1,6 @@ +set hive.mapred.mode=nonstrict; + +drop table if exists src10; +CREATE TABLE src10(key int, value string) partitioned by (ds string) CLUSTERED BY (key) INTO 2 BUCKETS STORED AS TEXTFILE; + +load data local inpath '../../data/files/srcbucket20.txt' INTO TABLE src10 partition(ds='2008-04-08'); diff --git a/ql/src/test/queries/clientnegative/load_data_bucketed_2.q b/ql/src/test/queries/clientnegative/load_data_bucketed_2.q new file mode 100644 index 0000000000..a4fa7ad661 --- /dev/null +++ b/ql/src/test/queries/clientnegative/load_data_bucketed_2.q @@ -0,0 +1,6 @@ +set hive.mapred.mode=nonstrict; + +drop table if exists src10; +CREATE TABLE src10(key int, value string) partitioned by (ds string) CLUSTERED BY (key) INTO 2 BUCKETS STORED AS TEXTFILE; + +load data local inpath '../../data/files/auto_sortmerge_join/small/000002_0' INTO TABLE src10 partition(ds='2008-04-08'); diff --git a/ql/src/test/queries/clientpositive/load_data_acid_rename.q b/ql/src/test/queries/clientpositive/load_data_acid_rename.q new file mode 100644 index 0000000000..b21bc5ef3d --- /dev/null +++ b/ql/src/test/queries/clientpositive/load_data_acid_rename.q @@ -0,0 +1,12 @@ +set hive.mapred.mode=nonstrict; + +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +drop table if exists acid_rename; +create table acid_rename (userid bigint, string1 string, subtype double, decimal1 decimal, ts timestamp) stored as orc TBLPROPERTIES ("transactional"="true"); +load data local inpath '../../data/files/orc_split_elim.orc' into table acid_rename; + +dfs -ls ${hiveconf:hive.metastore.warehouse.dir}/acid_rename/*/000000_0; + +drop table acid_rename; diff --git a/ql/src/test/queries/clientpositive/smb_mapjoin_7.q b/ql/src/test/queries/clientpositive/smb_mapjoin_7.q index 4a6afb0496..fed931c897 100644 --- a/ql/src/test/queries/clientpositive/smb_mapjoin_7.q +++ b/ql/src/test/queries/clientpositive/smb_mapjoin_7.q @@ -16,8 +16,8 @@ create table smb_join_results(k1 int, v1 string, k2 int, v2 string); create table smb_join_results_empty_bigtable(k1 int, v1 string, k2 int, v2 string); create table normal_join_results(k1 int, v1 string, k2 int, v2 string); -load data local inpath '../../data/files/empty1.txt' into table smb_bucket4_1; -load data local inpath '../../data/files/empty2.txt' into table smb_bucket4_1; +load data local inpath '../../data/files/empty/000000_0' into table smb_bucket4_1; +load data local inpath '../../data/files/empty/000001_0' into table smb_bucket4_1; insert overwrite table smb_bucket4_2 select * from src; diff --git a/ql/src/test/results/clientnegative/load_data_bucketed_1.q.out b/ql/src/test/results/clientnegative/load_data_bucketed_1.q.out new file mode 100644 index 0000000000..d721364a08 --- /dev/null +++ b/ql/src/test/results/clientnegative/load_data_bucketed_1.q.out @@ -0,0 +1,13 @@ +PREHOOK: query: drop table if exists src10 +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table if exists src10 +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE src10(key int, value string) partitioned by (ds string) CLUSTERED BY (key) INTO 2 BUCKETS STORED AS TEXTFILE +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@src10 +POSTHOOK: query: CREATE TABLE src10(key int, value string) partitioned by (ds string) CLUSTERED BY (key) INTO 2 BUCKETS STORED AS TEXTFILE +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@src10 +#### A masked pattern was here #### diff --git a/ql/src/test/results/clientnegative/load_data_bucketed_2.q.out b/ql/src/test/results/clientnegative/load_data_bucketed_2.q.out new file mode 100644 index 0000000000..d721364a08 --- /dev/null +++ b/ql/src/test/results/clientnegative/load_data_bucketed_2.q.out @@ -0,0 +1,13 @@ +PREHOOK: query: drop table if exists src10 +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table if exists src10 +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE src10(key int, value string) partitioned by (ds string) CLUSTERED BY (key) INTO 2 BUCKETS STORED AS TEXTFILE +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@src10 +POSTHOOK: query: CREATE TABLE src10(key int, value string) partitioned by (ds string) CLUSTERED BY (key) INTO 2 BUCKETS STORED AS TEXTFILE +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@src10 +#### A masked pattern was here #### diff --git a/ql/src/test/results/clientpositive/beeline/smb_mapjoin_7.q.out b/ql/src/test/results/clientpositive/beeline/smb_mapjoin_7.q.out index 7a6f8c53a5..4b1313dc93 100644 --- a/ql/src/test/results/clientpositive/beeline/smb_mapjoin_7.q.out +++ b/ql/src/test/results/clientpositive/beeline/smb_mapjoin_7.q.out @@ -38,19 +38,19 @@ POSTHOOK: query: create table normal_join_results(k1 int, v1 string, k2 int, v2 POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:default POSTHOOK: Output: default@normal_join_results -PREHOOK: query: load data local inpath '../../data/files/empty1.txt' into table smb_bucket4_1 +PREHOOK: query: load data local inpath '../../data/files/empty/000000_0' into table smb_bucket4_1 PREHOOK: type: LOAD #### A masked pattern was here #### PREHOOK: Output: default@smb_bucket4_1 -POSTHOOK: query: load data local inpath '../../data/files/empty1.txt' into table smb_bucket4_1 +POSTHOOK: query: load data local inpath '../../data/files/empty/000000_0' into table smb_bucket4_1 POSTHOOK: type: LOAD #### A masked pattern was here #### POSTHOOK: Output: default@smb_bucket4_1 -PREHOOK: query: load data local inpath '../../data/files/empty2.txt' into table smb_bucket4_1 +PREHOOK: query: load data local inpath '../../data/files/empty/000001_0' into table smb_bucket4_1 PREHOOK: type: LOAD #### A masked pattern was here #### PREHOOK: Output: default@smb_bucket4_1 -POSTHOOK: query: load data local inpath '../../data/files/empty2.txt' into table smb_bucket4_1 +POSTHOOK: query: load data local inpath '../../data/files/empty/000001_0' into table smb_bucket4_1 POSTHOOK: type: LOAD #### A masked pattern was here #### POSTHOOK: Output: default@smb_bucket4_1 diff --git a/ql/src/test/results/clientpositive/llap/load_data_acid_rename.q.out b/ql/src/test/results/clientpositive/llap/load_data_acid_rename.q.out new file mode 100644 index 0000000000..b915cdbd31 --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/load_data_acid_rename.q.out @@ -0,0 +1,29 @@ +PREHOOK: query: drop table if exists acid_rename +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table if exists acid_rename +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table acid_rename (userid bigint, string1 string, subtype double, decimal1 decimal, ts timestamp) stored as orc TBLPROPERTIES ("transactional"="true") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@acid_rename +POSTHOOK: query: create table acid_rename (userid bigint, string1 string, subtype double, decimal1 decimal, ts timestamp) stored as orc TBLPROPERTIES ("transactional"="true") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@acid_rename +PREHOOK: query: load data local inpath '../../data/files/orc_split_elim.orc' into table acid_rename +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@acid_rename +POSTHOOK: query: load data local inpath '../../data/files/orc_split_elim.orc' into table acid_rename +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@acid_rename +#### A masked pattern was here #### +PREHOOK: query: drop table acid_rename +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@acid_rename +PREHOOK: Output: default@acid_rename +POSTHOOK: query: drop table acid_rename +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@acid_rename +POSTHOOK: Output: default@acid_rename diff --git a/ql/src/test/results/clientpositive/smb_mapjoin_7.q.out b/ql/src/test/results/clientpositive/smb_mapjoin_7.q.out index b71c5b87c1..83033b07c0 100644 --- a/ql/src/test/results/clientpositive/smb_mapjoin_7.q.out +++ b/ql/src/test/results/clientpositive/smb_mapjoin_7.q.out @@ -38,19 +38,19 @@ POSTHOOK: query: create table normal_join_results(k1 int, v1 string, k2 int, v2 POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:default POSTHOOK: Output: default@normal_join_results -PREHOOK: query: load data local inpath '../../data/files/empty1.txt' into table smb_bucket4_1 +PREHOOK: query: load data local inpath '../../data/files/empty/000000_0' into table smb_bucket4_1 PREHOOK: type: LOAD #### A masked pattern was here #### PREHOOK: Output: default@smb_bucket4_1 -POSTHOOK: query: load data local inpath '../../data/files/empty1.txt' into table smb_bucket4_1 +POSTHOOK: query: load data local inpath '../../data/files/empty/000000_0' into table smb_bucket4_1 POSTHOOK: type: LOAD #### A masked pattern was here #### POSTHOOK: Output: default@smb_bucket4_1 -PREHOOK: query: load data local inpath '../../data/files/empty2.txt' into table smb_bucket4_1 +PREHOOK: query: load data local inpath '../../data/files/empty/000001_0' into table smb_bucket4_1 PREHOOK: type: LOAD #### A masked pattern was here #### PREHOOK: Output: default@smb_bucket4_1 -POSTHOOK: query: load data local inpath '../../data/files/empty2.txt' into table smb_bucket4_1 +POSTHOOK: query: load data local inpath '../../data/files/empty/000001_0' into table smb_bucket4_1 POSTHOOK: type: LOAD #### A masked pattern was here #### POSTHOOK: Output: default@smb_bucket4_1 diff --git a/ql/src/test/results/clientpositive/spark/smb_mapjoin_7.q.out b/ql/src/test/results/clientpositive/spark/smb_mapjoin_7.q.out index ac49c02913..610abab91b 100644 --- a/ql/src/test/results/clientpositive/spark/smb_mapjoin_7.q.out +++ b/ql/src/test/results/clientpositive/spark/smb_mapjoin_7.q.out @@ -38,19 +38,19 @@ POSTHOOK: query: create table normal_join_results(k1 int, v1 string, k2 int, v2 POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:default POSTHOOK: Output: default@normal_join_results -PREHOOK: query: load data local inpath '../../data/files/empty1.txt' into table smb_bucket4_1 +PREHOOK: query: load data local inpath '../../data/files/empty/000000_0' into table smb_bucket4_1 PREHOOK: type: LOAD #### A masked pattern was here #### PREHOOK: Output: default@smb_bucket4_1 -POSTHOOK: query: load data local inpath '../../data/files/empty1.txt' into table smb_bucket4_1 +POSTHOOK: query: load data local inpath '../../data/files/empty/000000_0' into table smb_bucket4_1 POSTHOOK: type: LOAD #### A masked pattern was here #### POSTHOOK: Output: default@smb_bucket4_1 -PREHOOK: query: load data local inpath '../../data/files/empty2.txt' into table smb_bucket4_1 +PREHOOK: query: load data local inpath '../../data/files/empty/000001_0' into table smb_bucket4_1 PREHOOK: type: LOAD #### A masked pattern was here #### PREHOOK: Output: default@smb_bucket4_1 -POSTHOOK: query: load data local inpath '../../data/files/empty2.txt' into table smb_bucket4_1 +POSTHOOK: query: load data local inpath '../../data/files/empty/000001_0' into table smb_bucket4_1 POSTHOOK: type: LOAD #### A masked pattern was here #### POSTHOOK: Output: default@smb_bucket4_1