Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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
Hadoop 如何从蜂巢桌插入到分区桌(如拼花地板)?_Hadoop_Hive_Cloudera_Impala - Fatal编程技术网

Hadoop 如何从蜂巢桌插入到分区桌(如拼花地板)?

Hadoop 如何从蜂巢桌插入到分区桌(如拼花地板)?,hadoop,hive,cloudera,impala,Hadoop,Hive,Cloudera,Impala,我有蜂巢桌和分区桌 我插入到分区表中,如下所示。如果不存在,则自动创建分区 我在impala编辑器中运行此查询 此查询花费的时间太长 insert into default.dw_partitioned_table partition (partition_islemtarih_string) select *, cast(replace(strleft(recorddate,10),'-','')as int) as partition_islemtarih_str

我有蜂巢桌和分区桌

我插入到分区表中,如下所示。如果不存在,则自动创建分区

我在impala编辑器中运行此查询

此查询花费的时间太长

insert into   default.dw_partitioned_table
            partition (partition_islemtarih_string)
select *, cast(replace(strleft(recorddate,10),'-','')as int) as partition_islemtarih_string
from default.dw_hive_table
where recorddate <to_timestamp('2019-05-01 00:00:00', 'yyyy-MM-dd HH:mm:ss')
 and  recorddate>=to_timestamp('2019-01-01 00:00:00', 'yyyy-MM-dd HH:mm:ss');   
插入default.dw_分区_表
分区(分区\u islemtarih\u字符串)
选择*,强制转换(替换(strleft(recorddate,10),'-',''作为int)作为分区\u islemtarih\u字符串
从default.dw\u配置单元\u表
其中recorddate=to_时间戳(“2019-01-01 00:00:00”,“yyyy-MM-dd HH:MM:ss”);
我错过了什么,还是我做错了


提前感谢

您的插入速度很慢,因为impala正在为原始表中的每个日期创建分区
replace(strleft(recorddate,10),'-','')
。Impala为每个分区创建物理文件,这就是它非常慢的原因。
如果您有大量记录,并且确实希望按日期分发数据,那么这样做将花费很长时间。
更好的办法是在记录日期的MM yyyy进行分区-这将创建均匀分布的分区。看看您的SQL,您甚至可以在yyyy上发布。
另外请注意,静态分区要快得多。例如-

插入t分区(part_col='2020'),从t2中选择*-更快,因为黑斑羚不必创建动态分区。

谢谢你的回答,我更新了我的问题。我的分区是int。所以我不能在MM yyyy做它。但我可以尝试插入自动创建的pattitioned table,然后删除,并将键改为yyyyMM。这也是唯一的。也请使用
cast(从时间戳(recorddate,'yyyyymm')作为int)
以确保您的分区工作正常。银行回复,那么我可以使用那些带有
介于
关键字之间的分区吗?如果您发出选择,则选择是。我不知道你们之间还能用什么。但它将像一个新的表-所以你可以使用。