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-millis
time-micros
duration
フォーマット設定
設定 | 説明 | デフォルト |
---|---|---|
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 が含まれています: