加载到 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 的单引号或双引号之间