在 Athena 中添加一个由两个现有列组成的列
Add a column consisting of two existing columns in Athena
我有一个table,由100列组成,其中两列是dt和tm,它们是分区。看起来像这样:
-------------------
| dt tm |
-------------------
| 2022/01/01 10 |
| 2022/01/02 15 |
| 2022/01/03 03 |
| 2022/01/04 20 |
-------------------
我希望能够添加另一列,它将作为基于 dt 和 tm 的“连接”的时间戳。即:
--------------------------------------------
| dt tm timestamp |
--------------------------------------------
| 2022/01/01 10 2022/01/01 10:00:00 |
| 2022/01/02 15 2022/01/02 15:00:00 |
| 2022/01/03 03 2022/01/03 03:00:00 |
| 2022/01/04 20 2022/01/04 20:00:00 |
--------------------------------------------
table 使用 Glue 创建并使用爬虫每隔几个小时更新一次。
到目前为止,我尝试使用 ALTER TABLE ADD COLUMNS
函数但无法解决问题,因为除了新列的名称及其类型之外我无法添加任何内容。我需要的是添加一个为每个添加的新行计算的列。
那可能吗?
感谢任何帮助!
坦率地说,与其添加另一列,我建议您在具有附加列的 table 上创建一个视图。
这样,无论何时在原始 table 中添加数据,额外的列都会包含您期望的数据。不需要 'populate' 附加列。
如果您的字段是文本,您可以使用:
CREATE VIEW my_view AS
SELECT
*,
dt || ' ' || tm || ':00:00' as timestamp
FROM table
如果您的字段是 DATE 和 INT 并且您想要 TIMESTAMP 输出,请使用:
CREATE VIEW my_view AS
SELECT
*,
CAST(dt as TIMESTAMP) + tm * interval '1' hour as timestamp
FROM table
然后您可以使用视图名称访问 table,例如:
SELECT * FROM my_view
WHERE timestamp < '2022-01-01'
我有一个table,由100列组成,其中两列是dt和tm,它们是分区。看起来像这样:
-------------------
| dt tm |
-------------------
| 2022/01/01 10 |
| 2022/01/02 15 |
| 2022/01/03 03 |
| 2022/01/04 20 |
-------------------
我希望能够添加另一列,它将作为基于 dt 和 tm 的“连接”的时间戳。即:
--------------------------------------------
| dt tm timestamp |
--------------------------------------------
| 2022/01/01 10 2022/01/01 10:00:00 |
| 2022/01/02 15 2022/01/02 15:00:00 |
| 2022/01/03 03 2022/01/03 03:00:00 |
| 2022/01/04 20 2022/01/04 20:00:00 |
--------------------------------------------
table 使用 Glue 创建并使用爬虫每隔几个小时更新一次。
到目前为止,我尝试使用 ALTER TABLE ADD COLUMNS
函数但无法解决问题,因为除了新列的名称及其类型之外我无法添加任何内容。我需要的是添加一个为每个添加的新行计算的列。
那可能吗?
感谢任何帮助!
坦率地说,与其添加另一列,我建议您在具有附加列的 table 上创建一个视图。
这样,无论何时在原始 table 中添加数据,额外的列都会包含您期望的数据。不需要 'populate' 附加列。
如果您的字段是文本,您可以使用:
CREATE VIEW my_view AS
SELECT
*,
dt || ' ' || tm || ':00:00' as timestamp
FROM table
如果您的字段是 DATE 和 INT 并且您想要 TIMESTAMP 输出,请使用:
CREATE VIEW my_view AS
SELECT
*,
CAST(dt as TIMESTAMP) + tm * interval '1' hour as timestamp
FROM table
然后您可以使用视图名称访问 table,例如:
SELECT * FROM my_view
WHERE timestamp < '2022-01-01'