ホームページ  >  記事  >  バックエンド開発  >  S3 から Snowflake にデータをロードし、1 対 1 の順序でラムダを呼び出します

S3 から Snowflake にデータをロードし、1 対 1 の順序でラムダを呼び出します

王林
王林転載
2024-02-09 11:00:041170ブラウズ

将数据从 S3 加载到 Snowflake,并按 1 by 1 的顺序调用 lambda

質問内容

ラムダを使用してS3バケットフォルダーからスノーフレークテーブルにデータをロードしようとしています。ファイルが取り込まれる S3 トリガーを設定し、ラムダとスノーフレークの間の統合を形成して、受信ファイルを s3 にスノーフレーク テーブルにロードしました。

問題は、S3 フォルダーに 1000 個のファイルが取り込まれており、スノーフレークとラムダの間で輻輳が発生していることです。 1000 個のファイルが S3 バケットに取り込まれたときに、ラムダが一度に 1 つのファイルを処理する方法を探しています。最初のファイルをロードした後は、次のファイルのみが順番に処理されます。例: Snowflake から確認を受け取るか、Snowflake に対する確認を受け取ります。


正解


予約された同時実行数を持つように AWS Lambda 関数を設定できます - AWS Lambda:

Reserved Concurrency = 1 を設定すると、一度に 1 つの Lambda 関数インスタンスのみが実行されます。 Snowflake の構成に応じて、Snowflake に負荷をかけずにファイルをより高速に処理するために、これを 2 または 3 に増やすことを選択できます。

関数に渡されるイベントの最大数である

バッチ サイズ を構成することもできます。 S3 が同じ Lambda インスタンスに複数のファイルを送信する場合、コードはイベントをループし、呼び出しごとに複数のファイルを処理できます。

少し懸念があるのですが、

多数のオブジェクトを作成し、Lambda 関数の同時実行数が 1 に制限されている場合、S3 による Lambda への呼び出しによって の実行後にタイムアウトが発生する可能性があります。複数回の再試行。その場合は、次のようにする必要があります:

イベントを
    Amazon SQS キュー
  • (Lambda 関数に直接送信するのではなく) に送信するように S3 を設定し、 SQS キューからメッセージを
  • プルするように Lambda を設定する
  • この方法では、大規模なファイル バックログが原因で (おそらく) タイムアウトするのではなく、メッセージが安全にキューに入れられます。

以上がS3 から Snowflake にデータをロードし、1 対 1 の順序でラムダを呼び出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。