将具有少量条件的配置单元/ impala表中的数据导出到文件中

时间:2016-08-08 05:16:22

标签: hive sqoop impala

将带有条件的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 = $$$$$$$$

会很有效率

2 个答案:

答案 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';

请参阅此链接:

Dynamic Partition Concept

希望这很有用。