【问题标题】:Redshift Unload with case-sensitive headers带有区分大小写的标头的 Redshift Unload
【发布时间】:2018-12-10 20:17:48
【问题描述】:

以前,卸载命令没有创建标题行。此功能现在可通过“HEADER”选项获得。但是,它不保留标题的大小写。

以下语句创建一个标题为“my column header 1”的文件...

UNLOAD ('SELECT col1 "My Column Header 1", col2 "My Column Header 2" FROM mytable;')  
TO 's3://mybucket/filename.csv.'  
CREDENTIALS 'aws_iam_role=mycredentials'  
DELIMITER ','  
HEADER  
ALLOWOVERWRITE 
ADDQUOTES  
PARALLEL OFF;

有没有办法在列标题中保留大小写?

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-redshift


    【解决方案1】:

    不,使用 HEADER 选项时无法做到这一点,因为 Redshift 没有区分大小写的列名。所有标识符(表名、列名等)始终以 小写 存储在 Redshift 元数据中。

    您可以选择设置一个参数,以便在 SELECT 语句的结果中以大写形式返回列名

    https://docs.aws.amazon.com/redshift/latest/dg/r_names.html

    标准和分隔标识符中的 ASCII 字母不区分大小写,并且在数据库中折叠为小写。在查询结果中,列名默认以小写形式返回。要以大写形式返回列名,请将 describe_field_name_in_uppercase 配置参数设置为 true。

    【讨论】:

      【解决方案2】:

      使用 SET 属性修改 Redshift 服务器配置

      enable_case_sensitive_identifier - 确定数据库、表和列的名称标识符是否区分大小写的配置值

      SET enable_case_sensitive_identifier TO true;
      SELECT or CREATE TABLE
      RESET enable_case_sensitive_identifier;
      

      https://docs.aws.amazon.com/redshift/latest/dg/t_Modifying_the_default_settings.html

      【讨论】:

      • 这对我有用。请注意,您还需要将 SQL 查询的 SELECT 子句中的列名用双引号括起来才能正常工作。未加引号的列名仍将转换为小写。查看上面的 AWS 文档。
      猜你喜欢
      • 2021-03-22
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多