メインコンテンツまでスキップ
メインコンテンツまでスキップ

Avro

InputOutputAlias

説明

Apache Avro は、Apache の Hadoop プロジェクト内で開発された行指向のデータシリアル化フレームワークです。 ClickHouse の Avro フォーマットは、Avro データファイルの読み書きをサポートしています。

データ型の対応

以下のテーブルは、Apache Avro フォーマットがサポートするすべてのデータ型と、それに対応する ClickHouse のdata typesINSERTSELECT クエリに示しています。

Avro データ型 INSERTClickHouse データ型Avro データ型 SELECT
boolean, int, long, float, doubleInt(8\16\32), UInt(8\16\32)int
boolean, int, long, float, doubleInt64, UInt64long
boolean, int, long, float, doubleFloat32float
boolean, int, long, float, doubleFloat64double
bytes, string, fixed, enumStringbytes または string *
bytes, string, fixedFixedString(N)fixed(N)
enumEnum(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, …) **
nullNullable(Nothing)null
int (date) ***Date, Date32int (date) ***
long (timestamp-millis) ***DateTime64(3)long (timestamp-millis) ***
long (timestamp-micros) ***DateTime64(6)long (timestamp-micros) ***
bytes (decimal) ***DateTime64(N)bytes (decimal) ***
intIPv4int
fixed(16)IPv6fixed(16)
bytes (decimal) ***Decimal(P, S)bytes (decimal) ***
string (uuid) ***UUIDstring (uuid) ***
fixed(16)Int128/UInt128fixed(16)
fixed(32)Int256/UInt256fixed(32)
recordTuplerecord

* 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 logical types

サポートされていない Avro 論理データ型:

  • time-millis
  • time-micros
  • duration

使用例

データの挿入

Avro ファイルから ClickHouse テーブルにデータを挿入するには:

取り込む Avro ファイルのルートスキーマは record タイプでなければなりません。

テーブルのカラムと Avro スキーマのフィールドの対応を見つけるために、ClickHouse はそれらの名前を比較します。 この比較は大文字小文字を区別し、未使用のフィールドはスキップされます。

ClickHouse テーブルカラムのデータ型は、挿入される Avro データの対応するフィールドと異なる場合があります。データを挿入する際、ClickHouse は上記のテーブルに従ってデータ型を解釈し、その後にキャストして対応するカラムタイプに変換します。

データをインポートする際に、スキーマにフィールドが見つからず、設定 input_format_avro_allow_missing_fields が有効になっている場合、エラーをスローするのではなく、デフォルト値が使用されます。

データの選択

ClickHouse テーブルから Avro ファイルにデータを選択するには:

カラム名は以下の条件を満たさなければなりません:

  • [A-Za-z_] で始まる
  • 続けて [A-Za-z0-9_] のみが使用される

出力 Avro ファイルの圧縮と同期間隔は、設定 output_format_avro_codec および output_format_avro_sync_interval によってそれぞれ構成できます。

例データ

ClickHouse の DESCRIBE 関数を使用することで、次の例のように Avro ファイルの推測フォーマットを迅速に表示できます。 この例には、ClickHouse S3 パブリックバケットにある公開アクセス可能な Avro ファイルの URL が含まれています:

フォーマット設定

設定説明デフォルト
input_format_avro_allow_missing_fieldsAvro/AvroConfluent フォーマット用:スキーマにフィールドが見つからない場合、エラーの代わりにデフォルト値を使用0
input_format_avro_null_as_defaultAvro/AvroConfluent フォーマット用:null と非 Nullable カラムの場合にデフォルトを挿入する0
format_avro_schema_registry_urlAvroConfluent フォーマット用:Confluent スキーマレジストリ URL。
output_format_avro_codec出力に使用される圧縮コーデック。可能な値:'null', 'deflate', 'snappy', 'zstd'。
output_format_avro_sync_intervalバイト単位の同期間隔。16384
output_format_avro_string_column_patternAvro フォーマット用:AVRO 文字列として選択する String カラムの正規表現。
output_format_avro_rows_in_fileファイル内の最大行数(ストレージが許可する場合)1