加载到 Hive 时从平面文件中删除单引号

Posted

技术标签:

【中文标题】加载到 Hive 时从平面文件中删除单引号【英文标题】:Removing single quotes from a flat file when loading to Hive 【发布时间】:2015-09-11 10:20:17 【问题描述】:

嘿,我在我的平面文件数据上创建了一个 Hive 外部表。

我的平面文件中的数据是这样的:

'abc',3,'xyz'

当我将它加载到 Hive 表中时,它会用单引号向我显示结果。 但我希望它是这样的:

abc,3,xyz

有什么办法吗?

【问题讨论】:

你能不能在文件上运行常规的tr来删除单引号,像这样...tr -d \' < existingFile > newFile 【参考方案1】:

我可以想出两种方法来获得想要的结果。

    使用 hive 中现有的字符串函数 - SUBSTR 和 LENGTH。
select SUBSTR("\'abc\'",2,length("\'abc\'")-2) , SUBSTR("\'3\'",2,length("\'3\'")-2) ,  SUBSTR("\'xyz\'",2,length("\'xyz\'")-2)

广义查询

 select SUBSTR(col1,2,length(col1)-2) , SUBSTR(col2,2,length(col2)-2) ,  SUBSTR(col3,2,length(col3)-2)

注意:Hive SUBSTR 方法期望字符串索引从“1”而不是“0”开始

    编写您自己的 UDF 来截断每个字符串的第一个和最后一个字母。

如何转换百万行? 假设您有一个包含 3 列和 100 万条记录的表(名为“staging”)。 如果您在下面运行查询,您将拥有新表“final”,它的开头或结尾不会有任何单引号。

INSERT INTO final SELECT SUBSTR(col1,2,length(col1)-2) , SUBSTR(col2,2,length(col2)-2) ,  SUBSTR(col3,2,length(col3)-2) from staging

一旦上述查询完成工作,您将在“最终”表中获得所需的结果

【讨论】:

我的文件包含数百万行/记录。有没有办法做到这一点,我可以摆脱每条记录中的单引号? 您可以在全表上运行以上查询并将结果存储在其他表中。使用此查询,您可以转换任意数量的记录,前提是您的集群中有足够的空间,速度将取决于您的集群硬件,但您将能够删除不需要的字符串 char。

以上是关于加载到 Hive 时从平面文件中删除单引号的主要内容,如果未能解决你的问题,请参考以下文章

用其他东西替换或删除新行,但只能在 CSV 文件上使用 PHP 的单引号或双引号之间

删除 Prolog 中的单引号/引号

Java Regex 删除开始/结束单引号但保留在引号内

Hive SQL中关于反引号的使用

使用 regexp_extract 从 BigQuery 中删除单引号和双引号

如何删除单引号并将双引号放在javascript中的对象数组中[关闭]