小编Pio*_*sen的帖子

AWS Athena(Presto)DISTINCT SQL查询中的结果是否重复?

我在S3上有一堆文件,只包含MD5,每行一个.我创建了一个AWS Athena表来对MD5运行重复数据删除查询.在这些文件和表格中总共有数亿个MD5.

雅典娜表创建查询:

CREATE EXTERNAL TABLE IF NOT EXISTS database.md5s (
  `md5` string 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'field.delim' = ','
) LOCATION 's3://bucket/folder/';
Run Code Online (Sandbox Code Playgroud)

以下是我尝试过的所有"重复数据删除"查询(这些查询应该都是相同的):

SELECT DISTINCT md5
FROM md5s;`

SELECT md5
FROM md5s
GROUP BY md5;

SELECT md5
FROM md5s
GROUP BY DISTINCT md5;

SELECT DISTINCT md5
FROM md5s
GROUP BY DISTINCT md5;
Run Code Online (Sandbox Code Playgroud)

来自Athena的所有结果输出.csvs仍然重复MD5.是什么赋予了?


雅典娜是否正在进行部分重复数据删除?- 更奇特的是,如果我COUNT(DISTINCT md5)在Athena中执行一次,我获得的计数与导出时返回的行数不同.

  • COUNT(DISTINCT md5) 在雅典娜:97,533,226
  • 出口不同MD5的记录:97,581,616
  • 结果导出中有14,790个重复项,因此COUNT(DISTINCT)计数都不好,结果导出错误.

雅典娜是否在出口上重复创作? - 情节变粗.如果我在Athena表中查询Athena结果导出中重复的MD5之一,我只从表中获得一个结果/行.我用一个LIKE查询测试了这个,以确保空格不会导致问题.这意味着Athena正在向导出添加重复项.结果中至少有两个相同的MD5.

select
  md5, …
Run Code Online (Sandbox Code Playgroud)

hive duplicates presto amazon-athena

7
推荐指数
1
解决办法
3597
查看次数

错误查询失败:无法取消嵌套类型:行

我正在运行一个查询

select bar_tbl.thing1
from foo
cross join unnest(bar) as t(bar_tbl)
Run Code Online (Sandbox Code Playgroud)

并得到了错误 Error Query failed: Cannot unnest type: row

为什么?

条形列看起来像这样 {thing1=abc, thing2=def}

presto

7
推荐指数
1
解决办法
3615
查看次数

通过旋转将Presto列转换为行

这是所需的输入和所需的输出.我不熟悉SQL或Presto中使用的术语,文档似乎指向使用,map_agg但我认为这里的问题是动态创建列,但是如果a, b, ...列可以知道且有限的话,这很奇怪.

我很高兴在SQL或Presto中了解它的正确功能,当然如果可行的话.优选地,以不涉及每个所需行=>列手动添加子句的方式.必须有一种方法可以自动执行此操作,或者通过提供值列表来过滤转换为标题的行(如'a'以下将如何移动为列标题)

table_a:

id | key | value

 0 |   'a'  |   1
 1 |   'b'  |   2
Run Code Online (Sandbox Code Playgroud)

然后成为desired:

id | 'a' | 'b' 
 0    1    2
Run Code Online (Sandbox Code Playgroud)

我能得到的最接近的是使用map_agg一组key: values可以在输出中一次拉出一组.然而,理想的解决方案是不必明确列出key我想要输出的每一个,而是爆炸或推出所有键kvs:

with subquery_A as (
  select 
    id,   
    map_agg(A.key, A.value) as "kvs"
  from A as a
  group by 1
)

select 
  sub_a.id,
  sub_a.kvs['a'],
  sub_a.kvs['b']

from subquery_A as sub_a
Run Code Online (Sandbox Code Playgroud)

sql presto

7
推荐指数
1
解决办法
1764
查看次数

SQL汇总数字的数字

我正在使用presto.我有一个数字的ID字段.我想要一个列在id中的数字.因此,如果ID = 1234,我想要一个输出10的列,即1 + 2 + 3 + 4.

我可以使用子字符串来提取每个数字并对它求和,但是有一个我可以使用的函数还是更简单的方法?

sql presto

6
推荐指数
1
解决办法
574
查看次数

Amazon athena 无法读取 S3 JSON 对象文件,并且 Athena 选择查询返回 JSON 键列的空结果集

我在 Athena 中创建了一个具有以下结构的表

CREATE EXTERNAL TABLE s3_json_objects (
    devId string,
    type string,
    status string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'true')
LOCATION 's3://mybucket/folder1/data/athena_test/';
Run Code Online (Sandbox Code Playgroud)

S3 存储桶对象包含这样的 JSON 结构

{
    "devId": "00abcdef1122334401",
    "type": "lora",
    "status": "huihuhukiyg"
}
Run Code Online (Sandbox Code Playgroud)

然而,下面的 SQL 正常工作并返回正确的结果,仅用于计数

SELECT count(*) as total_s3_objects FROM "athena_db"."s3_json_objects"
Run Code Online (Sandbox Code Playgroud)

但是每当我在 SQL select 语句下查询以从 S3 中获取 JSON 值时,它都会返回带有列空值的结果集

SELECT devid FROM "athena_db"."s3_json_objects"
SELECT json_extract(devid , '$.devid') as Id FROM "athena_db"."s3_json_objects"
SELECT * FROM "athena_db"."s3_json_objects"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

此外,我在 StackOverflow 和AWS Athena doc上发布此问题之前查看了这些链接 …

json amazon-web-services presto amazon-athena

6
推荐指数
1
解决办法
4425
查看次数

在 AWS Athena 中重用子查询会生成大量扫描数据

在 AWS Athena 上,我尝试使用 WITH 子句重用计算数据,例如

WITH temp_table AS (...)
SELECT ...
FROM temp_table t0, temp_table t1, temp_table t2
WHERE ...
Run Code Online (Sandbox Code Playgroud)

如果查询速度很快,“扫描的数据”就会通过屋顶。temp_table每次在FROM子句中引用时都会计算if 。

如果我单独创建一个临时表并在查询中多次使用它,我看不到问题。

有没有办法真正多次重用子查询而不会受到任何惩罚?

subquery presto amazon-athena

6
推荐指数
1
解决办法
1370
查看次数

如何在 Presto SQL 中按 X 分钟增量分组?

我有如下所示的数据集:

Name, Timestamp, Period, Value
Apple, 2012-03-22 00:00:00.000, 10, 34
Apple, 2012-03-22 00:06:00.000, 10, 23
Orange, 2012-03-22 00:00:00.000, 5, 3
Orange, 2012-03-22 00:08:00.000, 5, 45
Run Code Online (Sandbox Code Playgroud)

如果列周期是 N 分钟数,则应按每小时进行分组。因此,例如 Apple 应该在 1:10、1:20、1:30 ex 分组,其中 Orange 是 1:05、1:10 等。我还想对每个增量的 Value 列求平均值。

sql presto

6
推荐指数
1
解决办法
2554
查看次数

从 presto 中删除精确重复的行

对于下表(假设它有许多其他行和列),我如何在删除重复项的同时查询它?

订单号 顾客姓名 数量 帐单类型
1 克里斯 10 销售
1 克里斯 1 提示
1 克里斯 10 销售

请注意,虽然所有 3 行的顺序大致相同,但只有第 3 行是重复的——因为第 2 行告诉我们该顺序的提示。

使用distinct order_id将删除第 2 行和第 3 行,而我希望仅删除第 3 行。

欣赏任何想法

sql presto trino

6
推荐指数
1
解决办法
2911
查看次数

aws athena - 转换为 json 不返回 json 对象

我有一个 json 对象列表(结果属性),如示例中所示:

    select result   from mytable limit 1
Run Code Online (Sandbox Code Playgroud)

我得到:

[{hop=1, error=null, result=[{x=null, from=192.168.0.1, rtt=0.378, ttl=64, err=null, ittl=null, edst=null, late=null, mtu=null, size=68, flags=null, dstoptsize=null, hbhoptsize=null, icmpext=null}, {x=null, from=192.168.0.1, rtt=0.314, ttl=64, err=null, ittl=null, edst=null, late=null, mtu=null, size=68, flags=null, dstoptsize=null, hbhoptsize=null, icmpext=null}, {x=null, from=192.168.0.1, rtt=0.303, ttl=64, err=null, ittl=null, edst=null, late=null, mtu=null, size=68, flags=null, dstoptsize=null, hbhoptsize=null, icmpext=null}]}, {hop=2, error=null, result=[{x=null, from=71.120.7.1, rtt=8.135, ttl=254, err=null, ittl=null, edst=null, late=null, mtu=null, size=28, flags=null, dstoptsize=null, hbhoptsize=null, icmpext=null}, {x=null, from=71.120.7.1, rtt=0.769, ttl=254, err=null, ittl=null, edst=null, late=null, mtu=null, size=28, …
Run Code Online (Sandbox Code Playgroud)

json amazon-web-services presto amazon-athena

5
推荐指数
1
解决办法
1417
查看次数

为什么 AWS Athena 在将结果转储到目标 S3 位置时需要“溢出桶”

为什么 AWS Athena 在将结果转储到目标 S3 位置时需要“溢出桶”

WITH
( format = 'Parquet', 
parquet_compression = 'SNAPPY', 
external_location = '**s3://target_bucket_name/my_data**' 
) 
AS
WITH my_data_2 
AS 
    (SELECT * FROM existing_tablegenerated_data" limit 10)
SELECT *
FROM my_data_2;
Run Code Online (Sandbox Code Playgroud)

既然它已经有了存储数据的桶,为什么 Athena 需要溢出桶以及它在那里存储什么?

sql amazon-web-services amazon-athena trino

5
推荐指数
1
解决办法
2935
查看次数