【问题标题】:HIVE 2.1.1 Table creation CSV-SerdeHIVE 2.1.1 表创建 CSV-Serde
【发布时间】:2024-01-16 03:13:01
【问题描述】:

所以我做了所有的研究,在 HIVE 的任何地方都没有发现同样的问题。

点击下面的链接,我对引号中的数据没有任何问题..

https://github.com/ogrodnek/csv-serde

我的外部表创建具有以下 serde 属性,但由于某种原因,默认的 escapeChar('\') 被替换为我的数据的双引号 (") 的 quoteChar。

CREATE EXTERNAL TABLE IF NOT EXISTS people_full(
`Unique ID` STRING,
.
.
.
.
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'  
WITH SERDEPROPERTIES (
   "escapeChar"    = "\\"
)  
STORED AS TEXTFILE

数据问题:

示例 HDFS 源数据:“\”抢劫业务 目标 HIVE 输出:“”“抢生意

所以替换后"""抢业务中看到的三个双引号导致数据不需要的数据定界(列是一个很长的字符串)可能是因为HIVE无法处理数据内部的三个双引号(quote(“)也是我的默认引号字符)?

为什么会发生这种情况,有解决办法吗?请帮忙。非常感谢。

最好, 阿莎

【问题讨论】:

    标签: hive double-quotes hive-serde


    【解决方案1】:

    要将您的 csv 文件导入到 hdfs,并在数据之间使用双引号并为该文件创建 hive 表,请按照 hive 中的查询创建外部表,该表可以正常工作并显示文件中的每条记录。

    create external table tablename (datatype colname,datatype2 colname2) row format
    SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES 
    ("separatorChar" = ",","quoteChar" = "\"") stored as textfile location '/dir_name/';
    

    这里,tablename 代表表的名称,数据类型类似于 string、int 或其他,colname 代表您要给出的列的名称,最后 dir_name 是 csv 或文本文件在 hdfs 位置中的位置。

    【讨论】:

    • 我的文本中有双引号 - 列示例 - "5f367c99e4b0799af79a2b89","The Washingtons: George and Martha, "Join'd by Friendship, Crown'd by Love"","" In这里第二列里面有几个双引号。有什么办法可以解决这个问题?
    【解决方案2】:

    尝试使用 Escaped by 它会起作用。请找到以下屏幕截图示例。

    【讨论】:

    • 嗨@kundam,对不起,我编辑了我的问题以显示正确的SQL。我正在使用“escapeChar”=“\\”然后我有提到的数据问题(在我的帖子中),所以我改变了它到 "escapeChar" = "\'" 以避免替换并且它可以工作,但我不想更改默认的转义字符,即反斜杠。
    • 所以我的实际问题是 ('\') 被替换为默认引号字符,这个已知问题是任何 HIVE 版本吗?感谢您的帮助。
    • edit您的帖子并将实际代码显示为文本而不是屏幕截图。其他人无法从您的图像中复制和粘贴。 See here 了解详情。谢谢。
    • @kundam :我的文本中有双引号 - 列示例 - “5f367c99e4b0799af79a2b89”,“华盛顿:乔治和玛莎,“因友谊而加入,因爱而加冕”, "" 这里第二列里面有几个双引号。上述修复是否也可以用于此,因为我的转义引号是“如果您有任何相同的修复,请告诉我。