Avro
| 入力 | 出力 | エイリアス |
|---|---|---|
| ✔ | ✔ |
説明
Apache Avro は、効率的なデータ処理のためにバイナリエンコーディングを使用する行指向のシリアル化フォーマットです。Avro フォーマットは、Avro データファイル の読み書きをサポートします。このフォーマットは、スキーマを埋め込んだ自己記述型のメッセージを前提としています。Avro をスキーマレジストリと併用している場合は、AvroConfluent フォーマットを参照してください。
データ型マッピング
次の表は、Apache Avro 形式でサポートされているすべてのデータ型と、INSERT クエリおよび SELECT クエリにおける対応する ClickHouse のデータ型を示しています。
Avro データ型 INSERT | ClickHouse データ型 | Avro データ型 SELECT |
|---|---|---|
boolean, int, long, float, double | Int(8\16\32), UInt(8\16\32) | int |
boolean, int, long, float, double | Int64, UInt64 | long |
boolean, int, long, float, double | Float32 | float |
boolean, int, long, float, double | Float64 | double |
bytes, string, fixed, enum | String | bytes または string * |
bytes, string, fixed | FixedString(N) | fixed(N) |
enum | Enum(8\16) | enum |
array(T) | Array(T) | array(T) |
map(V, K) | Map(V, K) | map(string, K) |
union(null, T), union(T, null) | Nullable(T) | union(null, T) |
union(T1, T2, …) ** | Variant(T1, T2, …) | union(T1, T2, …) ** |
null | Nullable(Nothing) | null |
int (date) *** | Date, Date32 | int (date) *** |
long (timestamp-millis) *** | DateTime64(3) | long (timestamp-millis) *** |
long (timestamp-micros) *** | DateTime64(6) | long (timestamp-micros) *** |
bytes (decimal) *** | DateTime64(N) | bytes (decimal) *** |
int | IPv4 | int |
fixed(16) | IPv6 | fixed(16) |
bytes (decimal) *** | Decimal(P, S) | bytes (decimal) *** |
string (uuid) *** | UUID | string (uuid) *** |
fixed(16) | Int128/UInt128 | fixed(16) |
fixed(32) | Int256/UInt256 | fixed(32) |
record | Tuple | record |
* bytes がデフォルトであり、この挙動は設定 output_format_avro_string_column_pattern によって制御されます
** Variant type はフィールド値として暗黙的に null を受け入れるため、たとえば Avro の union(T1, T2, null) は Variant(T1, T2) に変換されます。
その結果、ClickHouse から Avro を生成する際には、スキーマ推論中に任意の値が実際に null かどうかを判断できないため、常に Avro の union 型の集合に null 型を含める必要があります。
サポートされていない Avro の論理データ型:
time-millistime-microsduration
フォーマット設定
| 設定 | 説明 | デフォルト |
|---|---|---|
input_format_avro_allow_missing_fields | スキーマ内にフィールドが存在しない場合にエラーとする代わりにデフォルト値を使用するかどうか。 | 0 |
input_format_avro_null_as_default | NULL 不可の列に null 値を挿入する際にエラーとする代わりにデフォルト値を使用するかどうか。 | 0 |
output_format_avro_codec | Avro 出力ファイルの圧縮アルゴリズム。指定可能な値: null, deflate, snappy, zstd. | |
output_format_avro_sync_interval | Avro ファイルにおける同期マーカーの頻度(バイト単位)。 | 16384 |
output_format_avro_string_column_pattern | Avro の string 型にマッピングする対象となる String 列を識別するための正規表現。デフォルトでは、ClickHouse の String 列は Avro の bytes 型として書き出される。 | |
output_format_avro_rows_in_file | 1 つの Avro 出力ファイルあたりの最大行数。この上限に達すると、新しいファイルが作成される(ストレージシステムがファイル分割をサポートしている場合)。 | 1 |
例
Avro データの読み取り
Avro ファイルから ClickHouse テーブルにデータを読み込むには、次のとおりです。
取り込まれた Avro ファイルのルートスキーマは、record 型でなければなりません。
テーブルのカラムと Avro スキーマのフィールドを対応付けるために、ClickHouse はそれらの名前を比較します。 この比較は大文字と小文字を区別し、未使用のフィールドはスキップされます。
ClickHouse テーブルのカラムのデータ型は、挿入される Avro データの対応するフィールドと異なる場合があります。データを挿入する際、ClickHouse は上記のテーブルに従ってデータ型を解釈し、その後データを対応するカラム型にキャストします。
データをインポートする際、スキーマ内でフィールドが見つからず、設定 input_format_avro_allow_missing_fields が有効になっている場合は、エラーを発生させる代わりにデフォルト値が使用されます。
Avro データの書き込み
ClickHouse テーブルのデータを Avro ファイルに書き出すには、次のようにします。
列名は次を満たす必要があります:
[A-Za-z_]で始まること- 続く文字は
[A-Za-z0-9_]のみであること
Avro ファイルの出力圧縮と同期間隔は、それぞれ output_format_avro_codec および output_format_avro_sync_interval 設定を使用して構成できます。
Avro スキーマの推論
ClickHouse の DESCRIBE 関数を使用すると、次の例のように Avro ファイルの推論されたスキーマをすばやく確認できます。
この例には、ClickHouse の S3 パブリックバケット内にある、公開アクセス可能な Avro ファイルの URL が含まれています。