Avro
| Input | Output | Alias |
|---|---|---|
| ✔ | ✔ |
説明
Apache Avro は、効率的なデータ処理のためにバイナリエンコーディングを使用する行指向のシリアル化フォーマットです。Avro フォーマットは、Avro データファイルの読み書きをサポートしています。このフォーマットは、埋め込まれたスキーマを持つ自己記述メッセージを期待します。スキーマレジストリと共に Avro を使用している場合は、AvroConfluent フォーマットを参照してください。
データ型のマッピング
以下の表は、Apache Avro形式がサポートするすべてのデータ型と、それに対応するClickHouseのdata typesにおけるINSERTおよびSELECTクエリの対応表です。
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タイプは、フィールド値としてnullを暗黙的に受け入れるため、例えばAvroのunion(T1, T2, null)はVariant(T1, T2)に変換されます。その結果、ClickHouseからAvroを生成する際には、スキーマ推論中に実際にどの値がnullであるか分からないため、常にAvroのunion型集合にnullタイプを含める必要があります。
*** Avro論理タイプ
サポートされていないAvro論理データ型:
time-millistime-microsduration
フォーマット設定
| 設定 | 説明 | デフォルト |
|---|---|---|
input_format_avro_allow_missing_fields | スキーマにフィールドが見つからなかった場合、エラーを投げる代わりにデフォルト値を使用するかどうか。 | 0 |
input_format_avro_null_as_default | 非 Nullable カラムに 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 カラムを識別する正規表現。デフォルトでは、ClickHouse の String カラムは Avro bytes 型として書き込まれます。 | |
output_format_avro_rows_in_file | 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 が含まれています: