带有区分大小写的标头的 Redshift Unload
Posted
技术标签:
【中文标题】带有区分大小写的标头的 Redshift Unload【英文标题】:Redshift Unload with case-sensitive headers 【发布时间】: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;
有没有办法在列标题中保留大小写?
【问题讨论】:
【参考方案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 文档。以上是关于带有区分大小写的标头的 Redshift Unload的主要内容,如果未能解决你的问题,请参考以下文章
从带有 ASCII 数据包大小标头的 Erlang 活动模式的套接字接收数据包