【问题标题】:Which characters and format can we use for specifying a delimiter for Hive table?我们可以使用哪些字符和格式来为 Hive 表指定分隔符?
【发布时间】:2018-12-09 21:13:51
【问题描述】:

我正在使用 Sqoop 将数据从 Mysql 导入 Hive。

但是,我在分隔符方面遇到了一些问题。实际上,我知道我可以通过为我的 Hive 表使用正确的分隔符来解决我的问题,因此它可以很好地读取我提供给它的文件。

但是,我搜索了几个小时,仍然找不到任何关于哪些字符可以用作字段分隔符的文档?!

能否请您帮我找出可以用作字段分隔符的确切字符类型?以及使用哪种格式/编码来指定它?

在关于 confluence 的 Hive 官方文档中,我只能找到:

    row_format
  : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
        [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)
  | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

但是,“char”代表什么?

提前致谢!

【问题讨论】:

  • 单个 ASCII-7 字符。不适用于 ¤(这是一个 UTF-8 字符,而不是基本 ASCII 字符)或 #EOF#\n(多个字符)。在使用 octal 表示法时,您可以使用特殊的控制字符,例如\013 表示 Ascii 11 或 VT
  • 您可能想要使用 OpenCsvSerde 代替默认的 Hive TEXT SerDe,它更通用(但速度较慢,并且不支持相同的选项)

标签: hive delimiter


【解决方案1】:

[字段由字符终止[由字符转义]] 在这个 char 中表示任何字符。最常用的是 逗号 (,),如 CSV 文件(逗号分隔文件)

但是我无法理解,如果你从 MySQL 中获取数据,你为什么要关心字段分隔符?

要么创建一个ORC 格式 的表,然后将数据sqoop 到其中。或者您也可以在导入数据的同时创建表。

mysql_connection="jdbc:mysql://server/db_name"

sqoop import \
--connect $mysql_connection \
--username=mysql_username \
--password=mysql_password \
--table batch_control_execution \
--hcatalog-database temp \
--hcatalog-table mysql_batch_control \
-m 1

添加以下选项以创建表

--create-hcatalog-table 

并添加以下选项以指定格式。

--hcatalog-storage-stanza \
'stored as orc tblproperties ("orc.compress"="SNAPPY")' 

【讨论】:

  • 感谢您的宝贵时间!您能否更准确地说明这一点:“您能帮我找出我可以使用哪种字符作为字段分隔符吗?以及使用哪种格式/编码来指定它?”
  • 你不需要任何分隔符来 sqoop 导入数据。
猜你喜欢
  • 1970-01-01
  • 2020-09-26
  • 2014-04-05
  • 2012-08-24
  • 1970-01-01
  • 2023-03-13
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多