【问题标题】:How to create a HIVE table to read semicolon separated values如何创建一个 HIVE 表来读取分号分隔的值
【发布时间】:2023-03-26 12:38:01
【问题描述】:

我想创建一个以分号分隔的值读取的 HIVE 表,但我的代码不断给我错误。有人有什么建议吗?

CREATE TABLE test_details(Time STRING, Vital STRING, sID STRING) 
PARTITIONED BY(Country STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ';'
STORED AS TEXTFILE;

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    对我来说,除了这个没有任何效果:

    FIELDS TERMINATED BY '\u0059'
    

    编辑:更新 Hive 后:

    FIELDS TERMINATED BY '\u003B'
    

    完整的:

    CREATE TABLE test_details(Time STRING, Vital STRING, sID STRING) 
    PARTITIONED BY(Country STRING)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\u0059'
    STORED AS TEXTFILE;
    

    【讨论】:

    • 我不知道为什么会这样,U+0059 应该是大写的 Y。分号 (;) 的 Unicode 代码点是 U+003B 并使用它作为 FIELDS TERMINATED BY "\u003B" 为我工作。不过感谢您的想法。
    • Hive 将 \uxxxx 解释为十进制值,这就是 (59 = 0x3B) 起作用的原因,虽然有点出乎意料。
    • 我们将集群更新为新的 Hive 版本。 \u0059 不再工作,现在只有 \u003B
    【解决方案2】:

    您使用的分隔符是导致错误的原因。分号是 hive 的行终止符,用于描述 hive 查询的完成情况。

    使用下面修改的ddl:

    CREATE TABLE test_details(Time STRING, Vital STRING, sID STRING) 
    PARTITIONED BY(Country STRING)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\;'
    STORED AS TEXTFILE;
    

    这对你有用。

    【讨论】:

    • 这对我在 hdinsight azure 集群上不起作用。
    • 不起作用,得到“在表格行格式的字段分隔符中期望 StringLiteral 靠近 'by'”。
    【解决方案3】:

    您的文字是否经过适当的清理? HIVE 本身不能很好地处理文本中的引号。

    尝试使用带有自定义分隔符的serde(即在这种情况下使用分号)。

    【讨论】:

    • 好吧,我试过用这个,我的代码是:add jar /home/wsyed/csv-serde.jar create table my_table(a string, b string) row format serde 'com.bizo.hive. serde.csv.CSVSerde' 与 serdeproperties ( "separatorChar" = "%" ) 存储为文本文件,但它并没有真正创建它只是要求的表:“显示所有 413 种可能性?(y 或 n)”
    猜你喜欢
    • 2021-02-08
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多