はじめに
Verticaでは、外部テーブル機能を利用してParquet形式のデータをデータベース上のテーブルと同じように参照することが可能です。
外部テーブルを作成する際、「CREATE EXTERNAL TABLE」コマンドを実行する必要がありますが、Verticaのファンクションを使用することで、このDDL文をParquetファイルが持つスキーマ情報から生成することが可能です。
カラム数が非常に多い外部テーブルを作成する際など、作業効率を大幅に向上させることができます。
ParquetファイルからDDLを生成する方法
構文
SELECT INFER_EXTERNAL_TABLE_DDL('path', 'table_name');パラメータ名 | 説明 |
|---|---|
path | Parquet形式を使用したファイルまたはディレクトリへのパスを指定します。 |
table_name | 作成する外部テーブルの名前を指定します。 |
実行例
dbadmin=> SELECT INFER_EXTERNAL_TABLE_DDL ('/home/dbadmin/external/lineorder/*.parquet', 'ext_lineorder');
WARNING 9311: This generated statement contains one or more varchar/varbinary columns which default to length 80
INFER_EXTERNAL_TABLE_DDL
---------------------------------------------------------------
create external table "ext_lineorder"(
"lo_orderkey" numeric(10, 0),
"lo_linenumber" int,
"lo_custkey" numeric(10, 0),
"lo_partkey" int,
"lo_suppkey" numeric(10, 0),
"lo_orderdate" int,
"lo_orderpriority" varchar,
"lo_shippriority" varchar,
"lo_quantity" numeric(10, 0),
"lo_extendedprice" numeric(10, 0),
"lo_ordertotalprice" numeric(10, 0),
"lo_discount" numeric(10, 0),
"lo_revenue" numeric(10, 0),
"lo_supplycost" numeric(10, 0),
"lo_tax" numeric(10, 0),
"lo_commit_date" numeric(10, 0),
"lo_shipmode" varchar
) as copy
from
'/home/dbadmin/external/lineorder/*.parquet' parquet
;
※出力結果は見やすくするために整形してあります
※VARCHAR型、VARVINARY型を使用している場合、WARNING 9311が出力されます。詳しくは制限事項3をご確認ください。制限事項
1.本関数が使用できるのは、Vertica 9.3.1以降です。
2.本関数は、Parquet形式以外のファイルでは動作しません。
3.以下の制約があるため、出力結果を必ずご確認のうえ、適宜手動にて修正を行ってください。
・VARCHAR型およびVARBINARY型の列の場合、本関数はカラムサイズを指定しません。
そのため、そのままDDL文を実行するとデフォルトの80としてカラムサイズが定義されます。
実際に必要なサイズにあわせてカラムサイズを調整してください。
・パーティショニングされたParquetデータにはパーティションカラムのデータ型を保持しません。
そのため、データ型が「UNKNOWN」として出力されます。
・カラム数の上限やカラム名の長さの上限などのVerticaの制約はParquetの制約と不一致です。
そのため、本関数によって出力されたDDL実行時にVerticaの制約に抵触する場合があります。
Verticaの制約については、”参考情報”に記載の「Verticaの主な制限事項」をご確認ください。
参考情報
・外部テーブルの概要
https://www.ashisuto.co.jp/cm/analytics-database/external_table.html
検証バージョンについて
この記事の内容はVertica 9.3で確認しています。
更新履歴
2025/03/28 参考情報を一部削除
2020/03/19 本記事を公開