Abh*_*dan 3 database clickhouse
我是 ClickHouse DB 的新手,文档中提供的示例无助于正确理解这个概念。解释如何在简单场景中使用arrayjoin()将不胜感激。
让我们考虑以下场景:
\n/* get error */\nSELECT 1\nWHERE 1 IN ([1, 2]);\n\n/* ok */\nSELECT 1\nWHERE 1 IN (SELECT arrayJoin([1, 2]));\nRun Code Online (Sandbox Code Playgroud)\n/* get error */\nSELECT *\nFROM (SELECT [1, 2] a)\nWHERE a = 2;\n\n/* ok */\nSELECT *\nFROM (SELECT arrayJoin([1, 2]) a)\nWHERE a = 2;\nRun Code Online (Sandbox Code Playgroud)\nSELECT\n metric_id,\n metric_name,\n arrayJoin(metric_values) AS metric_value\nFROM\n( /* test data */\n SELECT\n 1 AS metric_id,\n \'name_1\' AS metric_name,\n [1, 4, 55] AS metric_values\n UNION ALL\n SELECT\n 2 AS metric_id,\n \'name_2\' AS metric_name,\n [-7, 11] AS metric_values\n)\n/* result\n\xe2\x94\x8c\xe2\x94\x80metric_id\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80metric_name\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80metric_value\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 1 \xe2\x94\x82 name_1 \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 name_1 \xe2\x94\x82 4 \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 name_1 \xe2\x94\x82 55 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 name_2 \xe2\x94\x82 -7 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 name_2 \xe2\x94\x82 11 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n*/\nRun Code Online (Sandbox Code Playgroud)\n/* produce Cartesian product */\nSELECT\n arrayJoin([1, 2]) AS n,\n arrayJoin([\'a\', \'b\']) AS ll,\n arrayJoin([\'A\', \'B\']) AS ul\n/* result\n\xe2\x94\x8c\xe2\x94\x80n\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80ll\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80ul\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 1 \xe2\x94\x82 a \xe2\x94\x82 A \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 a \xe2\x94\x82 B \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 b \xe2\x94\x82 A \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 b \xe2\x94\x82 B \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 a \xe2\x94\x82 A \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 a \xe2\x94\x82 B \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 b \xe2\x94\x82 A \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 b \xe2\x94\x82 B \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n*/\nRun Code Online (Sandbox Code Playgroud)\n/* flatten the multidimension array */\nSELECT arrayJoin(arrayJoin([[1, 2], [3, 4]])) AS d\n/* result\n\xe2\x94\x8c\xe2\x94\x80d\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n*/\nRun Code Online (Sandbox Code Playgroud)\n当您需要逐项链接数组而不是获取笛卡尔积时,请考虑使用ARRAY JOIN:
\n/* cartesian product */\n\nSELECT\n arrayJoin(arr1),\n arrayJoin(arr2)\nFROM\n(\n SELECT\n [1, 2] AS arr1,\n [11, 22] AS arr2\n)\n\n/*\n\xe2\x94\x8c\xe2\x94\x80arrayJoin(arr1)\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80arrayJoin(arr2)\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 1 \xe2\x94\x82 11 \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 22 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 11 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 22 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n*/\n\n\n/* connect array\'s item one by one */\n\nSELECT a1, a2, arr1, arr2\nFROM\n(\n SELECT\n [1, 2] AS arr1,\n [11, 22] AS arr2\n)\nARRAY JOIN arr1 as a1, arr2 as a2\n\n/*\n\xe2\x94\x8c\xe2\x94\x80a1\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80a2\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80arr1\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80arr2\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 1 \xe2\x94\x82 11 \xe2\x94\x82 [1,2] \xe2\x94\x82 [11,22] \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 22 \xe2\x94\x82 [1,2] \xe2\x94\x82 [11,22] \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n*/\nRun Code Online (Sandbox Code Playgroud)\n