- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题有点类似于这个( Athena/Presto - UNNEST MAP to columns )。但就我而言,我事先知道我需要哪些列。
我的用例是这样的
我有一个 json blob,其中包含以下结构
{
"reqId" : "1234",
"clientId" : "client",
"response" : [
{
"name" : "Susan",
"projects" : [
{
"name" : "project1",
"completed" : true
},
{
"name" : "project2",
"completed" : false
}
]
},
{
"name" : "Adams",
"projects" : [
{
"name" : "project1",
"completed" : true
},
{
"name" : "project2",
"completed" : false
}
]
}
]
}
我需要创建一个 View ,它将返回类似这样的输出
name | project | Completed |
----------+-------------+------------+
Susan | project1 | true |
Susan | project2 | false |
Adams | project1 | true |
Adams | project2 | false |
我尝试了以下方法和其他方法。这是我能得到的最接近的
WITH dataset AS (
SELECT 'Susan' as name, transform(filter(CAST(json_extract('{
"projects": [{"name":"project1", "completed":false}, {"name":"project3", "completed":false},
{"name":"project2", "completed":true}]}', '$.projects') AS ARRAY<MAP<VARCHAR, VARCHAR>>), p -> (p['name'] != 'project1')), p -> ROW(map_values(p))) AS projects
)
SELECT * from dataset
CROSS JOIN UNNEST(projects)
这是我得到的输出
name projects _col2
1 Susan [{field0=[project3, false]}, {field0=[project2, true]}] {field0=[project3, false]}
2 Susan [{field0=[project3, false]}, {field0=[project2, true]}] {field0=[project2, true]}
我基本上想将 map 的键值对解除嵌套为单独的列。我如何在 presto/Athena 中执行此操作?
最佳答案
您的 JSON 示例似乎无效,它缺少 ,
之后"name" : "Susan"
和"name" : "Adams"
。除此之外,您可以通过此查询获得预期的输出,您需要 UNNEST 两次,并且还需要一些转换:
with dataset as
(
select json_parse('{"reqId" : "1234","clientId" : "client","response" : [{"name" : "Susan","projects" : [{"name" : "project1","completed" : true},{"name" : "project2","completed" : false}]},{"name" : "Adams","projects" : [{"name" : "project1","completed" : true},{"name" : "project2","completed" : false}]}]}') as json_col
)
,unnest_response as
(
select *
from dataset
cross join UNNEST(cast(json_extract(json_col, '$.response') as array<JSON>)) as t (response)
)
select
json_extract_scalar(response, '$.name') name,
json_extract_scalar(project, '$.name') project_name,
json_extract_scalar(project, '$.completed') project_completed
from unnest_response
cross join UNNEST(cast(json_extract(response, '$.projects') as array<JSON>)) as t (project);
关于presto - 在 Athena/presto 中取消嵌套映射值作为单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64798108/
我在 Athena 中成功创建了数据库表。请参阅下面的查询。 CREATE EXTERNAL TABLE IF NOT EXISTS s3_access_logs_db.wafbucket_lo
我正在尝试与 aws athena 合作,对我们存储在 s3 中的 json 文件进行一些查询。所以,我设法创建了一个简单的模式,一切似乎都很好,直到我注意到我的一些文件没有被考虑在内。 文件的键是用
这个问题在这里已经有了答案: AWS ATHENA: user-defined variables (4 个答案) 关闭去年。 我在 aws-athena 中有一个 SQL,它看起来或多或少像这样
刚接触 AWS,第一次使用 Athena。将不胜感激任何帮助/澄清。 我将查询结果位置设置为 s3://aws-athena-query-results-{ACCOUNTID}-{Region},无论
我正在尝试使用 Aws Athena 在 csv 文件上创建一个外部表,代码如下,但行 TBLPROPERTIES ("skip.header.line.count"="1")不起作用:它不会跳过 c
我需要将表中的某些字段隐藏到特定用户组。 我想到了创建一个查看 这允许我屏蔽这些字段。但是,一旦将权限设置为仅授予对 View 的访问权限,查询就会失败,因为它们还需要访问在 View 下正在查询的表
在 Athena 中创建表时,我无法使用特定文件创建表。有没有办法从给定的存储桶中选择以“year_2019”开头的所有文件?例如 s3://bucketname/prefix/year_2019*.
我有这个查询: SHOW PARTITIONS tablename; 结果是: dt=2018-01-12 dt=2018-01-20 dt=2018-05-21 dt=2018-04-07 dt=2
我一直在使用以下查询在 Athena 中创建一个表, CREATE EXTERNAL TABLE IF NOT EXISTS test.test_table ( `converteddat
我想将字符串的数据类型(例如:'2018-03-27T00:20:00.855556Z')转换为时间戳(例如:'2018-03-27 00:20:00')。 实际上我在 Athena 中执行查询: s
该表有一列像这样, data MAP 和行喜欢, id | data 1 | {"foo": 123} 2 | {"bar": 456} 那么,如何搜索 data["bar"] = 456? 我
我觉得这应该很简单,但我一直在努力寻找正确的术语,请耐心等待。 我有两列,timestamp和 voltages这是数组 如果我做一个简单的 SELECT timestamp, voltages FR
我正在尝试从超集访问 Athena,连接成功并且可以在 SQL 编辑器中看到所有模式和表(启用在 SQL 实验室中公开此数据库)。 在 SQL 编辑器上加载元数据时返回以下错误: ERROR OCCU
有没有人尝试过从 Oracle Data Integrator 连接 AWS Athena。 我一直在尝试这个,但我找不到合适的 JDBC 连接字符串。 我遵循的步骤 https://docs.aws
运行 MSCK repair tablename 命令时,athena查询编辑器返回错误 tables not in metastore . 但是表存在,我可以在该表上查询。 我有数据保存在 S3形式
我想通过 API 在 Athena 中创建一个数据库。我在 S3 中有 Parquet 文件,我想使用 API 进行查询,我想使用 Athena 进行查询。 无论如何,我可以通过 Athena 的 A
如何从嵌套的 json 文件创建 Athena 表?这是我的示例 json 文件。我只需要选定的键值对,例如 roofcondition 和 garagestalls。 { "reportId":
如何从嵌套的 json 文件创建 Athena 表?这是我的示例 json 文件。我只需要选定的键值对,例如 roofcondition 和 garagestalls。 { "reportId":
我在 Amazon Athena 中获得了一张表,其中一列包含 XML 数据。这可能不是最好的方法,但我需要利用现有的资源。 据我所知,没有原生支持从这些 XML 中提取数据(比如使用 XPATH 等
我得到了以下格式的带有嵌套结构的 JSON 文档 { "id": "p-1234-2132321-213213213-12312", "name": "athena to the re
我是一名优秀的程序员,十分优秀!