所以我有制表符分隔数据的外部表。一个简单的表如下所示:

create external table if not exists categories
(id string, tag string, legid string, image string, parent string, created_date string, time_stamp int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION 's3n://somewhere/';

现在,我在末尾添加了另一个字段,它将是一个用逗号分隔的值列表。

有没有一种方法可以像指定字段终止符一样指定它,还是必须依靠其中一个SERDES?

例如:
...list_of_names ARRAY<String>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ARRAY ELEMENTS SEPARATED BY ','
...

(我假设我需要为此使用Serde,但我认为询问没有任何害处)

最佳答案

我不知道如何更新现有的表来做到这一点,而是创建一个表。您所寻找的内容可以在https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL上找到。
那里的一小段

row_format
  : DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]

表创建中的一个示例是
CREATE TABLE IF NOT EXISTS visits
(
    ... Columns Removed...
)
    PARTITIONED BY (userdate STRING)
    ROW FORMAT DELIMITED
        FIELDS TERMINATED BY '\001'
        COLLECTION ITEMS TERMINATED BY '\002'
        MAP KEYS TERMINATED BY '\003'
    STORED AS TEXTFILE
;

您要查找的行是数组的COLLECTION ITEMS TERMINATED BY char

hth

关于hadoop - 在Hive中使用外部表支持数组列类型的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6270084/

10-11 02:56