sql >> データベース >  >> RDS >> Mysql

s3からAuroraMySQLRDSインスタンスへのデータの一括読み込みを自動化する

    アプローチは上記のとおりで、S3イベントトリガーとラムダジョブがs3バケット/オブジェクトの場所をリッスンします。ファイルがs3の場所にアップロードされるとすぐに、ラムダジョブが実行され、ラムダでは、AWSGlueジョブを呼び出すように設定できます。これはまさに私たちが行ったことであり、成功裏に生きています。 Lambdaの寿命は15分で、Glueジョブをトリガー/開始するのに1分もかからないはずです。

    参考のためにサンプルソースをここで見つけてください。

    from __future__ import print_function
    import json
    import boto3
    import time
    import urllib
    
    print('Loading function')
    
    s3 = boto3.client('s3')
    glue = boto3.client('glue')
    
    def lambda_handler(event, context):
        gluejobname="your-glue-job-name here"
    
        try:
            runId = glue.start_job_run(JobName=gluejobname)
            status = glue.get_job_run(JobName=gluejobname, RunId=runId['JobRunId'])
            print("Job Status : ", status['JobRun']['JobRunState'])
        except Exception as e:
            print(e)
            print('Error getting object {} from bucket {}. Make sure they exist '
                  'and your bucket is in the same region as this '
                  'function.'.format(source_bucket, source_bucket))
        raise e
    

    Lambda関数を作成するには、AWS Lambdra-> Create a new function from Scratch-> Select S3 for eventに移動し、必要に応じてS3バケットの場所とプレフィックスを設定します。次に、上記のコードサンプル、インラインコード領域をコピーして貼り付け、必要に応じて接着剤ジョブ名を構成します。必要なIAMの役割/アクセス設定がすべて揃っていることを確認してください。

    接着ジョブには、Auroraに接続するためのプロビジョニングが必要です。その後、Auroraが提供する「LOADFROMS3.....」コマンドを使用できます。すべてのパラメータグループの設定/構成が必要に応じて行われていることを確認してください。

    問題があれば教えてください。

    更新:LOAD FROM S3のサンプルコードスニペット:

    conn = mysql.connector.connect(host=url, user=uname, password=pwd, database=dbase)
    cur = conn.cursor()
    cur, conn = connect()
    createStgTable1 = "DROP TABLE IF EXISTS mydb.STG_TABLE;"
    createStgTable2 = "CREATE TABLE mydb.STG_TABLE(COL1 VARCHAR(50) NOT NULL, COL2 VARCHAR(50), COL3 VARCHAR(50), COL4 CHAR(1) NOT NULL);"
    loadQry = "LOAD DATA FROM S3 PREFIX 's3://<bucketname>/folder' REPLACE INTO TABLE mydb.STG_TABLE FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 1 LINES (@var1, @var2, @var3, @var4) SET col1= @var1, col2= @var2, col3= @var3, [email protected];"
    cur.execute(createStgTable1)
    cur.execute(createStgTable2)
    cur.execute(loadQry)
    conn.commit()
    conn.close()
    



    1. HAProxyからProxySQLに移行するためのヒント

    2. MySQLとLIKEの%との比較

    3. MySQLクエリでアクセント付き文字を正規化する

    4. 静的関数と潜水艦