Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive insert overwrite from select语句中的配置单元动态分区未加载动态分区的数据_Hive_Hiveql - Fatal编程技术网

Hive insert overwrite from select语句中的配置单元动态分区未加载动态分区的数据

Hive insert overwrite from select语句中的配置单元动态分区未加载动态分区的数据,hive,hiveql,Hive,Hiveql,insert overwrite from select语句中的配置单元动态分区没有加载动态分区的数据,而是提供数据配置单元默认分区 如果我说显示分区表2 它只给出一个分区详细信息,即HIVE\u DEFAULT\u分区 我有一个没有任何分区的暂存表,可以从序列文件中读取数据 如果不存在,则创建外部表table1(DS字符串、col1字符串、col2字符串、col3字符串) 以“\t”结尾的行格式分隔字段 存储为SEQUENCEFILE 位置'/user/' TBLProperty(“skip.

insert overwrite from select语句中的配置单元动态分区没有加载动态分区的数据,而是提供数据配置单元默认分区

如果我说显示分区表2

它只给出一个分区详细信息,即HIVE\u DEFAULT\u分区

我有一个没有任何分区的暂存表,可以从序列文件中读取数据

如果不存在,则创建外部表table1(DS字符串、col1字符串、col2字符串、col3字符串)
以“\t”结尾的行格式分隔字段 存储为SEQUENCEFILE 位置'/user/' TBLProperty(“skip.header.line.count”=“1”)

来自文件的字段DS的日期格式为m/d/yy

然后我创建生产表,如下所示

如果不存在表2(col1字符串、col2字符串、col3字符串),则创建外部表
分区依据(DS字符串) 存储为SEQUENCEFILE TBLProperty(“skip.header.line.count”=“1”)

设置hive.exec.dynamic.partition.mode=nonstrict

然后插入查询,如下所示

插入覆盖表table2分区(DS) 选择col1、col2、col3、cast(DS作为日期) 来自表1

当我查询表2时,我得到如下结果

d1 d2 d3配置单元默认分区 d4 d5 d5配置单元默认分区

对于最后一列,我希望分区列中有一个日期字段,而我得到的是HIVE\u DEFAULT\u分区

我预期的数据如下

d1 d2 d3 5/1/17 d4 d5 d5 5/1/17


有人可以帮忙吗?

到目前为止,您可以直接转换的唯一格式是
yyyy-mm-dd
任何尝试从另一种格式转换的结果都是NULL,因此您的所有记录都将转到默认分区

  • 将分区列定义为日期(
    分区依据(DS日期)
  • 使用
    到日期(从unixtime到unix时间戳(DS,'M/d/y'))
    进行转换
演示


你提到的分区是强制性的吗?因为分区可以在任何字段上进行,所以值格式可能不同。我没有回答这个问题
hive> select cast('5/1/17' as date) as ds;
OK
ds
NULL
hive> select cast('2015-05-01' as date) as ds;
OK
ds
2015-05-01
hive> select to_date(from_unixtime(to_unix_timestamp('5/1/17','M/d/y'))) as ds;
OK
ds
2017-05-01