Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerAvro スキーマは、Apache Avro 形式で保存するレコードの構造とデータ型を定義する正式な仕様です。Apache Avro 形式は、Apache Hadoop や Apache Kafka などのビッグデータシステムでよく使用されるデータシリアル化システムです。Avro スキーマにより、関与するプログラミング言語やプラットフォームに関係なく、Avro に書き込まれたデータを容易に理解したり、異なるシステム間で処理したりできます。
Avro スキーマは JSON データ形式で定義されます。avroschema!
モジュールローダーを使用して、Avro スキーマファイル (.json
または .avsc
) をモジュールとして DataWeave スクリプトにインポートできます。このローダーにより、各自のスキーマで宣言されている型を DataWeave で直接使用できます。
DataWeave は、Avro スキーマファイルを読み込み、ファイルの宣言を他の DataWeave モジュールの型と同じようにアクセスできる DataWeave 型ディレクティブに変換します。ディレクティブを使用して、新しい型を作成したり、変数の型をチェックしたり、パターンを照合したり、型を使用する新しい関数を宣言したりします。DataWeave では、これらの型の使用方法に制限はありません。
Avro スキーマで定義されている型をインポートするには、以下の構文を使用します。
typeToImport
: *
を使用してスキーマで定義されているすべての型をインポートしたり、スキーマの 1 つの型 (Root
など) をインポートしたりします。スキーマでは、スキーマで指定された名前を Avro 名前付き型 (record
や enum
など) で使用します。異なる名前の Avro スキーマの型 (Root as Country
など) をインポートすることもできます。スクリプトでその名前を使用して型を参照できます。
pathToAvroSchemaFile
: スキーマファイルへのパスを指定するには、ファイルの区切り文字を ::
に置き換えて、ファイル名の拡張子 (.json
または .avsc
) を削除します。たとえば、スキーマへのパスが example/schema/User.json
の場合、example::schema::User
を使用します。
import _typesToImport_ from avroschema!_pathToAvroSchemaFile_
次の例は、型をインポートする方法を示しています。
import * from avroschema!example::schema::User
次の例では Avro スキーマを使用します。
example/schema/User.json
){
"name": "User",
"type": "record",
"fields": [
{"name": "name", "type": "string" },
{"name": "email", "type": "string" },
{"name": "address", "type": ["null", "string"]},
{"name": "telephone", "type": ["null", "string"]}
]
}
JSON
前の例の import ディレクティブをスクリプトヘッダーに含めると、Avro スキーマの既存の型が読み込まれます。import * from avroschema!example::schema::User
では、唯一の既存の型は、ルートで指定された User
型です。この型は、4 つのプロパティ (name
、email
、address
、telephone
) を持つオブジェクトを記述します。このディレクティブは、DataWeave スクリプトで次の型を宣言することに相当します。
%dw 2.0
type User = {| name: String, email: String, address?: Null | String, telephone?: Null | String |}
dataweave
address
と telephone
は省略可能な項目 (?
で示される) です。
User
型を使用して、値が Avro スキーマで定義された構造に従っているかどうかを判断できます。
次の例では、オブジェクトに必須項目 name
および email
が含まれているため、値 true
が出力されます。
%dw 2.0
import * from avroschema!example::schema::User
---
{
name: "John",
email: "john@acme.org"
} is User
dataweave
"true"
次の例では、オブジェクトに必須項目 name
が含まれていないため、値 false
が出力されます。
%dw 2.0
import * from avroschema!example::schema::User
---
{
email: "john@acme.org",
address: "123 Evergreen St.",
telephone: "555 555 555"
} is User
dataweave
"false"
DataWeave はスキーマで定義された名前付き型ごとに個別の型を生成します。名前付き型には、レコード、列挙、および固定型があります。
example/schema/Address.json
){
"name": "Address",
"type": "record",
"fields" : [
{"name": "city", "type": "string"},
{"name": "state", "type": "string"},
{
"name": "country",
"type": {
"name": "Country",
"type": "record",
"fields": [
{"name": "isoCode", "type": "string"},
{"name": "name", "type": "string"}
]
}
}
]
}
JSON
次のディレクティブを使用して、前のスキーマの型をインポートできます。
import * from avroschema!example::schema::Address
スキーマで定義された型には、次の型の宣言と同じ効果があります。
type Address = {| city: String, state: String, country: Country |} type Country = {| isoCode: String, name: String |}
インポートディレクティブを使用して、スキーマの 1 つの型をインポートします。
import Country from avrochema!example::schema::Address
型名の競合を回避するために、as
キーワードを使用して、インポートされた型名を別の名前に変更できます。
import Country as Address_Country from avroschema!example::schema::Address