如何在 Impala 中插入 Array<Struct> 值?

Posted

技术标签:

【中文标题】如何在 Impala 中插入 Array<Struct> 值?【英文标题】:How to insert Array<Struct> values in Impala? 【发布时间】:2016-07-12 17:00:03 【问题描述】:

我正在尝试在 Impala 表中填充复杂数据结构 - 数组数据类型,目前我使用的是 CDH 5.5,真的不知道如何用一些数据填充列。例如:

create table arrstructex(
  name string,
  array< 
    struct<
      id:string,
      passcode:string,
      isprevileged:boolean
    >
  >
)

【问题讨论】:

【参考方案1】:

我稍微格式化了你的问题,以便我可以阅读它。我认为存在语法错误:数组需要有一个名称。 SQL 解析器也可能在字符前需要一个空格。

我建议您养成使用大写 SQL 关键字和缩进的习惯。所以关注example here

CREATE TABLE array_struct_example
(
  name STRING
  , credentials ARRAY < STRUCT <
      id: STRING
    , passcode: STRING
    , is_privileged: BOOLEAN
  >>
)

我添加了名称 credentials 并更正了拼写错误。

【讨论】:

【参考方案2】:

INSERT 语句目前不支持写入包含复杂类型(ARRAY、STRUCT 和 MAP)的数据文件。要为此类表准备 Parquet 数据,您可以在 Impala 外部生成数据文件,然后使用 LOAD DATA 或 CREATE EXTERNAL TABLE 将这些数据文件与表相关联。目前,此类表必须使用 Parquet 文件格式。

插入语句见文档:cloudera_5.15_insert

【讨论】:

以上是关于如何在 Impala 中插入 Array<Struct> 值?的主要内容,如果未能解决你的问题,请参考以下文章

插入 Impala 表与写入 HDFS

如何在 impala 或 hive 上读取复杂类型数组<string>?

在 IMPALA 脚本的插入语句中使用选择查询的结果

如何使用 Apache Impala 进行插入(如果不存在)?

cloudera impala jdbc 查询没有看到 array<string> Hive 列

使用java在impala表中插入数据