View a markdown version of this page

REST API からの読み取り - AWS Glue

REST API からの読み取り

REST API ConnectionType を登録して AWS Glue 接続を作成したら、AWS Glue ETL ジョブの REST API からデータを読み取ることができます。この接続を使用すると、外部 REST API データを同じジョブ内の他のソースと一緒に処理できます。データを読み取るには、接続名とエンティティ名が必要です。

次の例に、Python を使用して、REST API データソースからの読み取りを実行する方法を示します。

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type" } )

データのフィルタリング

フィルター述語をソース REST API にプッシュダウンして、転送されるデータ量を減らすことができます。REST API コネクタは、以下の 2 つのフィルターモードをサポートしています。

  • QUERY_PARAMS – 各フィルターは個別の URL クエリパラメータになります。例: ?created[gte]=1704067200&created[lte]=1717200000

  • FILTER_STRING – すべてのフィルターが 1 つのクエリパラメータに結合されます。例: ?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01"

AWS Glue ETL ジョブにフィルター述語を適用するには、FILTER_PREDICATE 接続オプションを使用します。

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type", "FILTER_PREDICATE": "status = \"ACTIVE\" AND lastUpdated >= \"2024-01-01T00:00:00.000Z\"" } )
FilterConfiguration プロパティ

FilterConfiguration オブジェクトを使用して ConnectionType 登録でフィルタリング動作を設定します。以下の表で、利用できるプロパティについて説明します。

プロパティ

説明

FilterMode

文字列

必須。QUERY_PARAMS または FILTER_STRING

OperatorMappings

マップ

論理演算子を API 固有の構文にマッピングします。

DateTimeFormat

String

DateTime 形式パターンまたは EPOCH_SECONDS/EPOCH_MILLIS

StripQuotes

ブール値

入力値から周囲の引用符を除去するかどうかを指定します。デフォルト: true

BetweenConfiguration

オブジェクト

デフォルトの BETWEEN 処理設定。

FilterStringConfiguration

オブジェクト

FILTER_STRING モードに固有の設定。

FilterStringConfiguration プロパティ

次のテーブルは、FILTER_STRING モードのプロパティについての説明です。

プロパティ

説明

FilterStringKey

文字列

必須。クエリパラメータキー (例:「search」や「filter」)。

QuoteStringValues

ブール値

文字列値と DateTime 値を引用符で囲むかどうかを指定します。

QuoteCharacter

String

引用文字。デフォルト: "

BetweenConfiguration プロパティ

次のテーブルは、BETWEEN 処理プロパティについての説明です。

プロパティ

モード

説明

LowBoundKey

QUERY_PARAMS

下限のキーテンプレート。{FIELD} プレースホルダーをサポートします。

HighBoundKey

QUERY_PARAMS

上限のキーテンプレート。省略すると上限が削除されます。

Template

FILTER_STRING

{FIELD}{LOW}{HIGH} プレースホルダーを含むテンプレート。

サポートされている演算子

フィルター述語では、EQUAL_TOGREATER_THANLESS_THANGREATER_THAN_OR_EQUAL_TOLESS_THAN_OR_EQUAL_TONOT_EQUAL_TOCONTAINSBETWEENANDOR の演算子がサポートされています。

フィールドレベルのオーバーライド

スキーマ定義の FilterOverrides を使用してフィールドごとのフィルター動作を設定できます。以下のオーバーライドプロパティを使用できます。

  • FieldName - フィルター出力で使用されるフィールド名をオーバーライドします。

  • OperatorMappings - フィールドレベルの演算子オーバーライド。

  • BetweenConfiguration - フィールドごとの BETWEEN オーバーライド。

  • DateTimeFormat - フィールドごとの DateTime 形式のオーバーライド。

例: QUERY_PARAMS モード

次の例は、演算子に角括弧表記、日付値にエポックタイムスタンプのクエリパラメータを使用する REST API の FilterConfiguration を示しています。

"FilterConfiguration": { "FilterMode": "QUERY_PARAMS", "OperatorMappings": { "EQUAL_TO": "{FIELD}", "GREATER_THAN_OR_EQUAL_TO": "{FIELD}[gte]", "LESS_THAN_OR_EQUAL_TO": "{FIELD}[lte]" }, "DateTimeFormat": "EPOCH_SECONDS", "BetweenConfiguration": { "LowBoundKey": "{FIELD}[gte]", "HighBoundKey": "{FIELD}[lte]" } }

この設定では、created >= 2024-01-01 AND created <= 2024-06-01 の入力フィルターによって URL クエリ文字列が生成されます。?created[gte]=1704067200&created[lte]=1717200000

例: FILTER_STRING モード

次の例は、スペース詰め演算子で単一のフィルター文字列パラメータを使用する REST API の FilterConfiguration を示しています。

"FilterConfiguration": { "FilterMode": "FILTER_STRING", "OperatorMappings": { "EQUAL_TO": " eq ", "GREATER_THAN": " gt ", "GREATER_THAN_OR_EQUAL_TO": " ge ", "LESS_THAN": " lt ", "AND": " and ", "OR": " or " }, "DateTimeFormat": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "BetweenConfiguration": { "Template": "{FIELD} ge {LOW} and {FIELD} le {HIGH}" }, "FilterStringConfiguration": { "FilterStringKey": "search", "QuoteStringValues": true, "QuoteCharacter": "\"" } }

この設定では、status = "ACTIVE" AND lastUpdated > 2024-01-01T00:00:00.000Z の入力フィルターによって URL クエリ文字列が生成されます。?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01T00:00:00.000Z"

パーティショニングクエリ

データ読み取りを Spark ワーカー間で並列パーティションに分割して、スループットを向上させることができます。REST API コネクタは、指定されたフィールドに基づいてデータを範囲に分割するフィールドベースのパーティショニングをサポートします。

Spark ジョブのパラメータ

次の接続オプションは、パーティショニングの動作を制御します。

  • PARTITION_FIELD - パーティション化するフィールド。スキーマで IsPartitionable: true としてマークする必要があります。

  • LOWER_BOUND - パーティション範囲の包括的な下限。

  • UPPER_BOUND - パーティション範囲の上限。中間パーティションは、この値を除外します。最後のパーティションにはこの値が含まれます。

  • NUM_PARTITIONS - 並列パーティションの数。

フィールドベースのパーティション分割

フィールドベースのパーティショニングは、指定されたフィールドに基づいてデータを範囲に分割します。次の例では、lastUpdated フィールドのデータをパーティショニングします。

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type", "PARTITION_FIELD": "lastUpdated", "LOWER_BOUND": "2024-01-01T00:00:00.000Z", "UPPER_BOUND": "2024-12-31T00:00:00.000Z", "NUM_PARTITIONS": "4" } )

lastUpdated フィールドに 4 つのパーティションがある場合、作業は次のように分散されます。

  • ワーカー 1: lastUpdated >= "2024-01-01" AND lastUpdated < "2024-04-01"

  • ワーカー 2: lastUpdated >= "2024-04-01" AND lastUpdated < "2024-07-01"

  • ワーカー 3: lastUpdated >= "2024-07-01" AND lastUpdated < "2024-10-01"

  • ワーカー 4: lastUpdated >= "2024-10-01" AND lastUpdated <= "2024-12-31"

RegisterConnectionType でのパーティションサポートの設定

フィールドベースのパーティショニングを有効にするには、スキーマ定義でフィールドをパーティションニング可能としてマークします。

"Schema": { "lastUpdated": { "FieldDataType": "TIMESTAMP", "IsPartitionable": true } }

パーティション分割では、以下の FieldDataType 値がサポートされています。

  • TIMESTAMP - DateTime パーティショニング。範囲を時間枠に分割します。

  • INTEGER - 整数パーティショニング。範囲を数値枠に分割します。

注記

コネクタは、AND を使用してパーティションフィルターとユーザーフィルターを組み合わせます。フィルターに LIMIT 句が含まれている場合、コネクタはパーティショニングをスキップします。パーティションの生成に失敗した場合、コネクタは 1 つのパーティションにフォールバックし、ジョブは引き続き完了します。