在 Impala 中将非 Kudu 转换为 Kudu 表

Posted

技术标签:

【中文标题】在 Impala 中将非 Kudu 转换为 Kudu 表【英文标题】:Turn non-Kudu to Kudu table in Impala 【发布时间】:2019-05-17 09:00:01 【问题描述】:

当我使用下面的代码时遇到 impala update statement 的问题

update john_estares_db.tempdbhue set QU=concat(account_id,"Q",quarter(mrs_change_date)," ",year(mrs_change_date));

返回错误信息:

AnalysisException: Impala does not support modifying a non-Kudu table: john_estares_db.tempdbhue

我想知道我是否可以将我的非 Kudu 表更改为 Kudu 表,或者是否可以在 Impala 中为非 Kudu 替换 update statement。 TIA

【问题讨论】:

【参考方案1】:

Apache Kudu 是一种数据存储(将其视为 HDFS/S3 的替代方案,但仅存储结构化数据),它允许基于主键进行更新。这与 Impala 有很好的集成。 Imapla 上的 kudu 表是一种查询存储在 Kudu 上的数据的方法。

简而言之,如果您尚未安装和设置 Kudu,则无法在 Impala 上创建 kudu 表。

如果您安装并设置了 Kudu,那么您不能简单地转换表 kudu 表。您必须创建一个具有类似结构的新 kudu 表,其中包含一些主键列(Kudu 需要所有表的主键)并使用 sql 查询 insert into .. select * from ... 从旧的非 kudu 表中插入数据。

【讨论】:

感谢您的帮助,但insert into .. select * from .... 的问题是它添加了行而不是列【参考方案2】:

john_estares_db.tempdbhue 的表类型是什么? 不支持 Hive 或其他表类型、更新或 upsert。 您可以使用show create table 检查您的表格类型。 show create table 如果您安装了 kudu,您可以创建一个 kudu 表,并将您的数据移动到 kudu 表中,然后您可以使用您的更新代码。

【讨论】:

以上是关于在 Impala 中将非 Kudu 转换为 Kudu 表的主要内容,如果未能解决你的问题,请参考以下文章

Kudu简单使用

用于 Kudu 兼容性的 Spark 数据帧转换列

0002-CENTOS7.2安装CDH5.10和Kudu1.2

怎么操作以kudu为引擎的hive数据库,使用IMPALA方式操作

在 Impala 中将 YYYYMMDD 字符串转换为日期

在 impala 中将儒略日期转换为公历日期