从双引号封闭csv文件格式加载配置单元数据

hrysbysz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(535)

我的查询不工作,根据这个职位类似的职位
将下面的命令与sql一起使用。但我不是从shell执行。sql在python中创建为字符串,并使用paramiko传递给hive。在壳牌,它工作得很好。但是当从python以字符串形式传递时,我得到了一个bash错误。看起来像是某个角色逃跑的问题。
我正在尝试加载csv文件,每个列的值都用双引号括起来。

strsql='''create table temp(col1 INT,col2 string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ("quoteChar" = "\"") tblproperties ('skip.header.line.count'='1'); '''

错误

["bash: -c: line 4: unexpected EOF while looking for matching `''\n", 'bash: -c: line 5: syntax error: unexpe                                                                                   cted end of file\n']

我换成了 ("quoteChar" = "\\"") 添加额外的斜杠。然后我得到一个sql错误

:FAILED: ParseException line 4:38 cannot recognize input near 'quoteChar' '=' ')' i                                                                                   n table properties list

在进一步检查时,调用hive命令时包含一些提取属性,如下所示。这可能是个问题吗?

hive -e set hive.cli.print.header=true;hive.support.quoted.identifiers=column;hvesql;
42fyovps

42fyovps1#

理想情况下,sql应该包含双引号。如下所示。所以正如ronak在评论中提到的,双引号应该被转义。

ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.OpenCSVSerde"
                WITH SERDEPROPERTIES ("quoteChar" = '"') tblproperties ("skip.header.line.count"="1")

因此,当作为字符串变量从shell外部发送时,应该按如下所示进行转义。需要使用双斜杠

ROW FORMAT SERDE \\"org.apache.hadoop.hive.serde2.OpenCSVSerde\\"
                WITH SERDEPROPERTIES (\\"quoteChar\\" = '\\"') tblproperties (\\"skip.header.line.count\\"=\\"1\\")

有点简单。但是花了很多时间才弄明白:)

相关问题