我从贝叶斯统计模型中抽取样本,用 Avro 序列化它们,将它们上传到 S3,然后用 Athena 查询它们。
我需要帮助编写一个在表中取消嵌套数组的查询。
CREATE TABLE 查询如下所示:
CREATE EXTERNAL TABLE `model_posterior`(
`job_id` bigint,
`model_id` bigint,
`parents` array<struct<`feature_name`:string,`feature_value`:bigint, `is_zid`:boolean>>,
`posterior_samples` struct <`parameter`:string,`is_scaled`:boolean,`samples`:array<double>>)
“posterior_samples”列中的“samples”数组是存储样本的位置。我已经设法使用以下查询取消嵌套“posterior_samples”结构:
WITH samples AS (
SELECT model_id, parents, sample, sample_index
FROM posterior_db.model_posterior
CROSS JOIN UNNEST(posterior_samples.samples) WITH ORDINALITY AS t (sample, sample_index)
WHERE job_id = 111000020709
)
SELECT * FROM samples
现在我想要的是取消父母列。此列中的每条记录都是一个结构数组。我正在尝试创建一个列,该列仅具有该结构数组中“feature_value”键的值数组。(我想要一个数组的原因是父母数组的长度可以> 1)。
换句话说,对于父行中的每个数组,我想要一个大小相同的数组。该数组应仅包含原始数组中结构的“feature_value”键的值。
关于如何解决这个问题的任何建议?
谢谢。