将带有条件的hive / impala表中的数据导出到文件中的有效方法是什么(数据量很大,接近10 GB)? hive表的格式是压缩的snappy,文件是csv。
每天对表进行分区,需要每天提取数据,我想知道是否
1)Imapala方法
impala-shell -k -i servername:portname -B -q' select * from table from year_month_date = $$$$$$$$' -o filename' - output_delimiter = \ 001'
2)Hive方法
插入覆盖目录' / path' select * from table from year_month_date = $$$$$$$$
会很有效率
答案 0 :(得分:3)
假设表格tbl
作为您的蜂巢拼花表,condition
作为您的过滤条件。
CTAS命令:
CREATE TABLE tbl_text ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/tmp/data' AS select * from tbl where condition;
您可以在HDFS的/tmp/data
找到您的CSV文本文件(由','分隔)。
如果需要,您可以使用以下命令将此文件提供给本地文件系统:
hadoop fs -get /tmp/data
答案 1 :(得分:1)
请尝试使用动态分区为您的Hive / Impala表有条件地有效地导出数据。
使用您感兴趣的列对您的表格进行分区,并根据您的查询获得最佳结果
第1步:创建临时配置单表TmpTable并将原始数据加载到其中
第2步:设置配置参数以支持动态分区
SET hive.exec.dynamic.partition.mode=non-strict;
SET hive.exec.dynamic.partition=true;
第3步:使用分区列创建主Hive表,例如:
CREATE TABLE employee (
emp_id int,
emp_name string
PARTITIONED BY (location string)
STORED AS PARQUET;
步骤4:将数据从临时表加载到员工表(主表)
insert overwrite table employee partition(location)
select emp_id,emp_name, location from TmpTable;
步骤5:使用条件从配置单元导出数据
INSERT OVERWRITE DIRECTORY '/path/to/output/dir' SELECT * FROM employee WHERE location='CALIFORNIA';
请参阅此链接:
希望这很有用。