计数 ROW 类型项目 Athena / Presto

Count ROW type item Athena / Presto

我有一个这样的 Athena 查询

SELECT typeof(records)
FROM "default"."table"
WHERE date = '2021-07-24'
AND device_id = 'abc'

结果是

_col0
row(1579560177000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579518772000 row(ds decimal(38,9)), 1579529572000 row(ds decimal(38,9)), 1579554776000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579556575000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579517872000 row(ds decimal(38,9)), 1579547574000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579525072000 row(ds decimal(38,9)), 1579551176000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579555676000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579540372000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579564676000 row(ds decimal(38,9)), 1579548475000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579530472000 row(ds decimal(38,9)), 1579528672000 row(ds decimal(38,9)), 1579552076000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579516072000 row(ds decimal(38,9)), 1579519672000 row(ds decimal(38,9)), 1579520572000 row(ds decimal(38,9)), 1579561076000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579535872000 row(ds decimal(38,9)), 1579544873000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579557476000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579561976000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579546674000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579516972000 row(ds decimal(38,9)), 1579523272000 row(ds decimal(38,9)), 1579538572000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579525972000 row(ds decimal(38,9)), 1579542173000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579559276000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579521472000 row(ds decimal(38,9)), 1579522372000 row(ds decimal(38,9)), 1579533172000 row(ds decimal(38,9)), 1579537672000 row(ds decimal(38,9)), 1579526872000 row(ds decimal(38,9)), 1579562876000 row(ds decimal(38,9)), 1579545773000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579550275000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579558376000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579532272000 row(ds decimal(38,9)), 1579536772000 row(ds decimal(38,9)), 1579549375000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579552976000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579563776000 row(ds decimal(38,9)), 1579524172000 row(ds decimal(38,9)), 1579543973000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579553876000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579534972000 row(ds decimal(38,9)), 1579539472000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579541272000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579543073000 row(ab decimal(38,9), bc  decimal(38,9), cd decimal(38,9), de decimal(38,9), ef decimal(38,9), fg decimal(38,9), gh decimal(38,9), hi decimal(38,9), ij decimal(38,9), jk decimal(38,9)), 1579531372000 row(ds decimal(38,9)), 1579527772000 row(ds decimal(38,9)), 1579534072000 row(ds decimal(38,9)))

我想计算每台设备每天的记录数以获得这样的结果

device_id, date, recordsNb
abc, 2021-07-24, 37

编辑

我的数据集其实是这样的

device_id, date, records
abc, 2021-07-24, {"1": {}, "2":{}}
def, 2021-07-24, {"a": {}, "b":{}, "c": {}}

这里的预期结果是:

device_id, date, recordsNb
abc, 2021-07-24, 2
def, 2021-07-24, 3
select device_id, date, count(*) as recordsNb 
from FROM "default"."table" 
group by device_id, date

您可以使用 json 来映射和计算键的数量:

WITH dataset(device_id, date, records) AS (
    values 
        ('abc', date '2021-07-24', JSON '{"1": {}, "2":{}}'),
        ('def', date '2021-07-24', JSON '{"a": {}, "b":{}, "c": {}}')
)

SELECT device_id,
    date,
    cardinality(map_keys(cast(records as MAP(VARCHAR, JSON)))) recordsNb
FROM dataset

输出:

device_id date recordsNb
abc 2021-07-24 2
def 2021-07-24 3

UPD

因为您有 ROW 个值,而不是 json 个值,您可以尝试下一步:

SELECT device_id,
    date,
    json_array_length(cast(records as json)) recordsNb
FROM table