【问题标题】:How to escape html code data while inserting data into a table of Hive如何在将数据插入 Hive 表时转义 html 代码数据
【发布时间】:2019-12-03 05:14:51
【问题描述】:

我需要将数据插入到我的表列中,该列具有特殊字符,例如 - ..... 所以我给了 \ ,它被用作每个文字的转义字符

这是我要插入的“简介”列的数据。 数据来自 csv 文件,所有数据都用双引号括起来

"<p><span style=""font-family: \'Calibri Light\': sans-serif\; font-size: xx-large\; color: #2184c2\;""><span style=""font-size: 28pt\;""><span style=""font-size: x-large\;""><span style=""font-size: 18pt\;""><strong>Help us improve by taking our short satisfaction survey.&nbsp\;</strong></span></span></span></span></p>"

当我尝试插入此数据时,出现以下错误。

AnalysisException: Syntax error in line 1:\n...","","<p><span style="font-family: \\\\\'Calibri Light\\\\\'...\n                             ^\nEncountered: -\nExpected: CROSS, FROM, FULL, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, OFFSET, ON, ORDER, RIGHT, STRAIGHT_JOIN, TABLESAMPLE, UNION, USING, WHERE, COMMA\n\nCAUSED BY: Exception: Syntax error\n (110) (SQLExecDirectW)')

日志类型 - 信息日志

有人可以帮我将这种数据插入表格

【问题讨论】:

  • 如果里面有特殊字符,你想避免插入整个句子吗?
  • 我的一个列数据有很多特殊字符,当我尝试将此数据插入表中时,由于存在特殊字符而出现错误。为了无任何错误地插入这些数据,我需要一个最佳解决方案。
  • 请从您的源表中添加一些示例数据。还要在源表和目标表的列中添加数据类型。
  • 这是我试图添加到列介绍中的数据“

    参加我们的简短满意度调查,帮助我们改进 

    "
  • 列名将是“简介”,数据类型是字符串

标签: sql hive impala


【解决方案1】:

分号和单引号需要用反斜杠转义:

create table test_str as select '<p><span style=""font-family: \'Calibri Light\', sans-serif\; font-size: xx-large\; color: #2184c2\;""><span style=""font-size: 28pt\;""><span style=""font-size: x-large\;""><span style=""font-size: 18pt\;""><strong>Help us improve by taking our short satisfaction survey&nbsp\;</strong></span></span></span></span></p>';

 select * from test_str;

结果:

<p><span style=""font-family: 'Calibri Light', sans-serif; font-size: xx-large; color: #2184c2;""><span style=""font-size: 28pt;""><span style=""font-size: x-large;""><span style=""font-size: 18pt;""><strong>Help us improve by taking our short satisfaction survey&nbsp;</strong></span></span></span></span></p>

【讨论】:

  • 是的,我只是想知道是否有任何方法可以转义整行而不是使用 \ 作为特殊字符。这样任何特殊字符都会出现在将自动转义的行中间
  • 不可能。分号在 Hive 中换行。单引号也有同样的问题。您可以在放入 Hive 之前执行此操作。但是在 hive CLI 中它应该已经被转义了
  • @DppriyaReddy 如果列值取自另一个列 valye - 您可以对整个字符串应用一些转义。但是对于文字是不可能的
  • 当我试图用双引号将整个值括起来时它不起作用
  • @DppriyaReddy 它不会以这种方式工作。例如,分号表示命令的结束。不可能转义整个字符串。分号中断命令。如果数据来自这样的选择,您可以应用一些转换:regexp_replace(original_string,'\\;','\\\\\;') 但我不知道这将如何帮助您,看来您正在使用文字,这不可能通过将整个文字字符串包含在一些引号或应用函数,文字应包含已转义的字符。您可以将 regexp_replace 之类的函数应用于非文字列
猜你喜欢
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 2014-08-29
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
相关资源
最近更新 更多