将条件很少的 hive/impala table 中的数据导出到文件中

Export the data from a hive/impala table with few conditions into file

将数据从 hive/impala table 导出到文件的有效方法是什么(数据会很大,接近 10 GB)?配置单元的格式 table 是 paraquet with snappy compressed 文件是 csv.

table每天分区,需要每天抽取数据,请问

1) Imapala 方法

impala-shell -k -i servername:portname -B -q 'select * from table where year_month_date=$$$$$$$$' -o 文件名'--output_delimiter=\001'

2) Hive 方法

插入覆盖目录 '/path' select * 来自 table 其中 year_month_date=$$$$$$$$

会很有效率

假设 table tbl 作为您的蜂巢镶木地板 table 和 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

请尝试为您的 Hive/Impala table 使用 动态分区 以有效地有条件地导出数据。

将您的 table 与您感兴趣的列进行分区,并根据您的查询以获得最佳结果

第 1 步: 创建一个临时 Hive Table TmpTable 并将原始数据加载到其中

第二步:设置hive参数支持动态分区

SET hive.exec.dynamic.partition.mode=non-strict;
SET hive.exec.dynamic.partition=true;

步骤 3: 创建带有分区列的 Main Hive Table,示例:

CREATE TABLE employee (
 emp_id int,
 emp_name string
PARTITIONED BY (location string)
STORED AS PARQUET;

第 4 步: 将数据从临时 table 加载到您的员工 table(主要 Table)

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

请参考这个link:

Dynamic Partition Concept

希望这有用。