【问题标题】:How to handle new line characters in hive?如何处理蜂巢中的换行符?
【发布时间】:2018-08-11 08:08:32
【问题描述】:

我正在将表从 Teradata 导出到 Hive.. teradata 中的表有一个地址字段,其中包含换行符 (\n).. 最初我正在导出表以从 Teradata 挂载文件系统路径,然后我正在加载将表放入 hive ... teradata 表和 hive 表之间的记录计数不匹配,因为 hive 中出现了换行符。

注意:我不想通过 sqoop 处理这个来带来数据我想在从本地路径加载到 hive 时处理换行符。

【问题讨论】:

    标签: hadoop hive teradata


    【解决方案1】:

    我通过使用以下选项创建一个外部表来实现这一点:

    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
    ESCAPED BY '\\' 
    STORED AS TEXTFILE;
    

    然后我为包含数据文件的目录创建了一个分区。 (我的表使用分区) 即

    ALTER TABLE STG_HOLD_CR_LINE_FEED ADD PARTITION (part_key='part_week53')  LOCATION '/ifs/test/schema.table/staging/';
    

    注意:确保在创建数据文件时使用“\”作为转义字符。

    【讨论】:

      【解决方案2】:

      Hive 中的加载数据命令仅将数据直接复制到 hdfs 表位置。

      Hive 拆分新行的唯一原因是如果您只定义存储为 TEXT 的表,默认情况下使用新行作为记录分隔符,而不是字段分隔符。

      要重新定义表格,您需要类似

      ROW FORMAT DELIMITED 
      FIELDS TERMINATED BY  ',' ESCAPED BY 'x' 
      LINES TERMINATED BY 'y'
      

      x 和 y 希望分别在包含换行符和记录分隔符的字段周围转义字符

      【讨论】:

      • 转义字符是什么意思,如果字段超过百万条记录
      • 例如,CSV 记录会在包含逗号的列周围加上引号 en.m.wikipedia.org/wiki/Escape_character
      • 您不能将由数据本身包含换行符的换行符分隔的记录放入 Hive。至少,不是纯文本。您需要使用 sqoop 否则要解析和加载正确的列
      猜你喜欢
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多