WHERE子句中的单引号与双引号返回不同的结果

问题描述 投票:0回答:1

似乎Athena的查询结果中包含CSV列标题。我使用TBLPROPERTIES ("skip.header.line.count"="1")删除了标头,使用下面的DDL重新创建了表。

我正在运行以下查询,以验证CREATE TABLE DDL是否有效。以下查询之间的唯一区别是WHERE子句中使用单引号还是双引号。问题是运行它们时我得到不同的结果。

查询1:

SELECT
  file_name
FROM table
WHERE file_name = "file_name"

上面的查询返回实际数据(请参见下面的示例表),而不是仅file_name字段为“ file_name”的行。

+-------+--------------------+
| Row # |     file_name      |
+-------+--------------------+
|     1 |                    |
|     2 | 1586786323.8194735 |
|     3 |                    |
|     4 | 1586858857.3117666 |
|     5 | 1586858857.3117666 |
|     6 | 1586858857.3117666 |
|   ... |                    |
+-------+--------------------+

查询2:

SELECT
  file_name
FROM table
WHERE file_name = 'file_name'

上面的查询返回no results,如果结果中未包含CSV列标题,则按预期返回。

我对第一个查询完全不返回任何结果感到困惑。至此,我已经仔细研究了AWS文档,似乎我在DDL上没有做错什么,SQL不在乎我是否使用单引号还是双引号。我在这里想念什么?

DDL:

CREATE EXTERNAL TABLE `table` (
     `file_name` string,
     `ticker` string,
     ...
     )
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES ( 
  'escapeChar'='\\', 
  'separatorChar'=',')
LOCATION
  's3://{bucket_name}/{folder}/'
TBLPROPERTIES (
  "skip.header.line.count"="1")
sql hive presto amazon-athena
1个回答
0
投票

单引号是用于分隔字符串的SQL标准。

双引号用于转义分隔符。因此,"file_name"引用该名称的列。一些数据库还接受字符串的双引号。这只是令人困惑。不要那样做。

© www.soinside.com 2019 - 2024. All rights reserved.