【问题标题】:Unload and escaping quotes in Redshift query在 Redshift 查询中卸载和转义引号
【发布时间】:2017-11-30 18:32:18
【问题描述】:

我已经在 SO 和官方文档 here 上查看过类似的问题。

我想将此查询卸载到 s3

SELECT column_name, data_type
FROM   information_schema.columns
WHERE  table_name = 'table_temp'
ORDER  BY ordinal_position;

UNLOAD ('SELECT column_name
FROM   information_schema.columns
WHERE  table_name = 'table_temp'
ORDER  BY ordinal_position')   
to 's3://bucket/folder/' 
CREDENTIALS 'aws_access_key_id=KEY;aws_secret_access_key=SECRET'
DELIMITER AS ',';    

尽管我尝试了几种方法来逃避单引号 \,\\,$," 似乎我无法实现它。有什么想法吗?

【问题讨论】:

    标签: amazon-s3 amazon-redshift


    【解决方案1】:

    如果您的查询包含引号(例如将文字值括起来),请将文字放在两组单引号之间——您还必须将查询括在单引号之间:

    ('select * from venue where venuestate=''NV''')
    

    参考:AWS Unload Redshift

    【讨论】:

      【解决方案2】:

      为什么我们不能使用:

      UNLOAD ('SELECT column_name [or *]
      FROM table_name [where clause]'
      )   
      to 's3://bucket/folder/' 
      CREDENTIALS 'aws_access_key_id=KEY;aws_secret_access_key=SECRET'
      DELIMITER AS ','; 
      

      【讨论】:

      • 是答案吗?
      • 是的。它有效。查询 information_schema 然后将table_name 作为参数传递是不是一个约束?您可以直接从表本身中直接执行select *(或选择一些相关列)。我在上面的答案中提到的方式。
      • UNLOAD 中,您缺少一个单引号,而且您不知道从哪个表读取。
      • 我想有一个误解:第一个查询本身有效,但是当我尝试卸载到 s3 时,我得到了以下错误[Amazon](500310) Invalid operation: syntax error at or near "a" 所以我需要做一些关于转义的事情。跨度>
      猜你喜欢
      • 2014-12-24
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-27
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多