从 Impala 分区拼花表创建文本表

Posted

技术标签:

【中文标题】从 Impala 分区拼花表创建文本表【英文标题】:Creating text table from Impala partitioned parquet table 【发布时间】:2016-03-18 12:52:08 【问题描述】:

我有一张镶木地板,格式如下:

.impala_insert_staging
yearmonth=2013-04
yearmonth=2013-05
yearmonth=2013-06
...
yearmonth=2016-04

每个目录下面都是我的镶木地板文件。我需要把它们放到我的另一张桌子上,它只有一个

.impala_insert_staging

文件。

请帮忙。

【问题讨论】:

我真的,真的不明白是什么问题。你为什么不运行一个简单的查询,比如INSERT INTO TABLE target SELECT cola, colb, ... FROM source 并使用 Impala 来实现它的本质,即数据库引擎? 【参考方案1】:

我发现最好的方法是将文件拉入本地,然后sqoop 将它们备份到文本表中。

为了拉下镶木地板,我执行了以下操作:

impala-shell -i <ip-addr> -B -q "use default; select * from <table>" -o filename '--output_delimiter=\x1A'

不幸的是,这会将yearmonth 值添加为我表中的另一列。所以我要么进入我的 750GB 文件并在最后一列中使用 sed/awk,要么使用 mysqlimport(因为我也在使用 MySQL)只导入我感兴趣的列。

最后我将数据sqoop到一个新的文本表中。

sqoop import --connect jdbc:mysql://<mysqlip> --table <mysql_table> -uroot -p<pass> --hive-import --hive-table <new_db_text>

【讨论】:

以上是关于从 Impala 分区拼花表创建文本表的主要内容,如果未能解决你的问题,请参考以下文章

sqoop 创建 impala 拼花桌

从分区文件结构创建 Impala 外部表

设置文本表 hsqldb Java

Impala分区表

从分区拼花文件中读取 DataFrame

使用 pyarrow 从分区拼花数据集中读取特定分区