带有区分大小写的标头的 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的主要内容,如果未能解决你的问题,请参考以下文章

是否在vertx Web中的标头比较区分大小写

导致 PREFLIGHT 的 HTTP 标头 - 澄清?

正则表达式不区分大小写搜索带有变量的整个单词

从带有 ASCII 数据包大小标头的 Erlang 活动模式的套接字接收数据包

Redshift Unload:仅在第一个分区中添加标头,不包括其余部分

区分 S3 对象创建事件与对象元数据更新