用于Redshift的Delimeter-escaping边缘外壳

时间:2016-05-27 23:36:34

标签: java escaping amazon-redshift

在我的应用程序中,我接受一些事件,将它们写入日志文件,然后将它们写入redshift。下面的文件显示了三种情况。在一种情况下,一切正常,没有使用管道。第二个用例有一个管道,但它很好地逃脱了。但是,第三种情况有点诡计。 if x < 8: if matrix[x+1][y+1] != 0 and matrix[x+2][y-2] == 0: #up + right . . . ,这意味着逃避它会产生Event.x=Hi\|,我不知道Redshift将如何解释这一点。它会a)将其解释为转义反斜杠,并将管道解释为常规分隔符(坏)?或者b)只看管道前的反斜线并仍然逃脱管道(好)?

Hi\\|

这是我目前转义和加入属性的代码。假设In my Java code ;Logfile Text ;Redshift columns ;Works -------------------------------------------------------------- Event.x ;Event.y ;Logfile Text ;Column X ;Column Y ;Works -------------------------------------------------------------- Hi ;10 ;Hi|10 ;Hi ;10 ;Yes -------------------------------------------------------------- Hi| ;10 ;Hi\||10 ;Hi| ;10 ;Yes -------------------------------------------------------------- Hi\| ;10 ;Hi\\||10 ;??? ;??? ;??? attributes

List<String>

1 个答案:

答案 0 :(得分:1)

您需要逃离逃生并逃离管道:"\|" -> "\\\|"

e.g。

.map(s -> s.replace("\\", "\\\\"))  // Escape escapes
.map(s -> s.replace("|", "\\|"))    // Escape existing delimiters

来自redshift docs

  

COPY加载\ n作为换行符并将\ t加载为制表符。   要加载反斜杠,请使用反斜杠(\)对其进行转义。