メインコンテンツへスキップ

質問

Map型を使用したカラムに可変の属性がある場合、それらを抽出してクエリで利用するにはどうすればよいですか?

回答

これは、可変の attributes フィールドからキーと値を抽出する基本的な例です。 この方法では、ソース/raw テーブルの各行から見かけ上の重複が生成されます。ただし、キーと値が抽出されるため、それらを主キーや、bloom filter のような索引を持つセカンダリキーに含めることができます。 この例では、基本的に Metrics テーブルを作成する元データがあり、そのテーブルには maps を含む attributes フィールド内で適用できる複数の属性があります。レコードに常に存在する属性がある場合は、それらを個別のカラムとして切り出して格納するほうが適しています。 出力結果や、このインスタンスで materialized view がどのように動作するかは、そのままコピー&ペーストすれば確認できるはずです。 サンプルのデータベースを作成します:
行と属性を格納する最初のテーブルを作成します:
テーブルにサンプルの行を挿入します。サンプル数は意図的に少なくしてあるため、materialized view を作成すると、属性ごとに行がどのように増えるかを確認できます。
その後、array join を使った materialized view を作成し、map の attribute を key カラムと value カラムに展開して抽出できるようにします。 説明のため、以下の例では暗黙的なテーブル (POPULATE コマンドと、.inner.{uuid}... のようなバッキングテーブル) を使用しています。 ただし、推奨されるベストプラクティスは、明示的なテーブルを使うことです。つまり、まずテーブルを定義し、その上に TO コマンドを使って materialized view を作成します。
新しいテーブルにはさらに多くの行が含まれ、キーが抽出されるため、次のようになります:
ここから、特定の属性を持つ行をクエリするには、次のようにします:
最終更新日 2026年7月1日