我有一个Redshift表,看起来像这样:
id | metadata
---------------------------------------------------------------------------
1 | [{"pet":"dog"},{"country":"uk"}]
2 | [{"pet":"cat"}]
3 | []
4 | [{"country":"germany"},{"education":"masters"},{"country":"belgium"}]
我想找一张看起来像这样的桌子:
id | field | value
------------------------
1 | pet | dog
1 | country | uk
2 | pet | cat
4 | country | germany
4 | education | masters
4 | country | belgium
然后,我可以将其与输入表其余部分的查询结合起来。
我曾尝试过使用Redshift JSON函数,但是由于无法在Redshift中编写函数/使用循环/具有变量,我真的看不到这样做的方法!
请让我知道是否可以澄清其他问题。
多亏了这篇受启发的博客文章,我才得以制定解决方案。这是:
SELECT MAX(JSON_ARRAY_LENGTH(metadata)) FROM input_table
): CREATE VIEW seq_0_to_3 AS
SELECT 0 AS i UNION ALL
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3
);
WITH exploded_array AS (
SELECT id, JSON_EXTRACT_ARRAY_ELEMENT_TEXT(metadata, seq.i) AS json
FROM input_table, seq_0_to_3 AS seq
WHERE seq.i < JSON_ARRAY_LENGTH(metadata)
)
SELECT *
FROM exploded_array;
生产:
id | json
------------------------------
1 | {"pet":"dog"}
1 | {"country":"uk"}
2 | {"pet":"cat"}
4 | {"country":"germany"}
4 | {"education":"masters"}
4 | {"country":"belgium"}
WITH exploded_array AS (
SELECT id, JSON_EXTRACT_ARRAY_ELEMENT_TEXT(metadata, seq.i) AS json
FROM input_table, seq_0_to_3 AS seq
WHERE seq.i < JSON_ARRAY_LENGTH(metadata)
)
SELECT id, field, JSON_EXTRACT_PATH_TEXT(json, field)
FROM (
SELECT id, json, REGEXP_SUBSTR(json, '[^{"]\\w+[^"]') AS field
FROM exploded_array
);
我有一些HTML元素,它们都有相同的标记。每个div都有一个唯一的父类。 因此,当我尝试编写一些jQuery来单独针对每个元素时,它会在所有实例上触发,而不管我是否指定要针对哪个类。我的想法是,通过使用(this)它将只针对div“box__wrapper-before”中的内容。 有人知道我错在哪里吗? null null Codepen示例:https://Codepen.io/nickels
问题内容: 我想返回数组的奇数,但是Eclipse似乎不接受我的返回码。我认为这需要返回整个数组,因为我将数组设置为方法的参数。如前所述,我需要传递一个数组并获取该数组的特定元素作为回报。即使我将该数组设为静态,如何返回单个元素? 编辑:好吧,这里是: 我知道这里可能存在多个错误,但我正在努力,不仅要返回奇数,还要将它们加在一起。 问题答案: 您的代码应如下所示: 这里的要点是方法返回类型,它应该
我对AWS EMR很陌生。我已经启动并运行了Hive,并且在S3中查询外部表,没有任何问题。我现在已经将Presto安装到EMR集群上,它似乎已经启动并运行,可以读取配置单元元数据库。但是,我运行的每个查询都返回列标题,但实际上不返回任何列(下面的查询)。 配置单元中的相同查询运行良好: 非常感谢任何帮助。 谢谢
创建一个数组切片,从 arr 数组的最后一个元素开始向前提取n个元素。 使用 Array.slice() 来创建一个从第 n 个元素开始从末尾的数组。 const takeRight = (arr, n = 1) => arr.slice(arr.length - n, arr.length); takeRight([1, 2, 3], 2); // [ 2, 3 ] takeRight([1,
创建一个数组切片,从arr数组的起始元素开始提取n个元素。 使用 Array.slice() 创建一个数组包含第一个元素开始,到 n 个元素结束的数组。 const take = (arr, n = 1) => arr.slice(0, n); take([1, 2, 3], 5); // [1, 2, 3] take([1, 2, 3], 0); // []
根据给定的函数对数组的元素进行分组,并返回每个分组中元素的数量。 使用 Array.map() 将数组的值映射到函数或属性名称。 使用 Array.reduce() 创建一个对象,其中的键是从映射的结果中产生的。 const countBy = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce