【发布时间】:2022-01-26 09:50:33
【问题描述】:
我有一个 CSV 文件,我想使用 Amazon Athena 进行查询。我遇到的问题是有一个布尔值使用 0 表示假,1 表示真。我认为 Athena SerDe 能够解析这个,但是当我查询表时该字段显示为空白,所以看起来它没有。如果有办法让我将 0 和 1 解析为 Athena 中的布尔值,有人可以告诉我吗?我宁愿不编辑 CSV 文件本身,因为它非常大而且非常耗时。
【问题讨论】:
标签: csv amazon-athena
我有一个 CSV 文件,我想使用 Amazon Athena 进行查询。我遇到的问题是有一个布尔值使用 0 表示假,1 表示真。我认为 Athena SerDe 能够解析这个,但是当我查询表时该字段显示为空白,所以看起来它没有。如果有办法让我将 0 和 1 解析为 Athena 中的布尔值,有人可以告诉我吗?我宁愿不编辑 CSV 文件本身,因为它非常大而且非常耗时。
【问题讨论】:
标签: csv amazon-athena
您可以使用CASE WHEN 来评估该值并通过将其与null 或0 进行比较来产生所需的输出。例如:
SELECT
CASE
when (id isnull or id = 0) THEN 'FALSE'
ELSE 'TRUE'
END BooleanOutput
FROM students;
产生输出:
FALSE
TRUE
TRUE
使用下面的源代码或from this link for live example。
-- create a table
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
gender TEXT NOT NULL
);
-- insert some values
INSERT INTO students VALUES (0, 'Felipe', 'M');
INSERT INTO students VALUES (1, 'Ryan', 'M');
INSERT INTO students VALUES (2, 'Joanna', 'F');
-- fetch some values
SELECT CASE when (id isnull or id = 0) THEN 'FALSE' ELSE 'TRUE' END BooleanOutput FROM students;
【讨论】:
您可以使用IF 函数。如果您的专栏名为zero_or_one,您可以这样写:
SELECT IF(zero_or_one, 1) AS true_or_false
FROM …
将数字 1 转换为 TRUE 并将所有其他值转换为 FALSE。如果您的列是字符串 intsead,请执行 IF(zero_or_one, '1')。
【讨论】: