Node.js DynamoDB 全レコード Scan コード例

Node.js DynamoDB 全レコード Scan コード例

Node.jsを使って、 AWSDynamoDB テーブル内をスキャンする

予め、 npm init を完了させて 下↓のコマンドで aws-sdk を インストールしておきます。

npm install aws-sdk

下のコードは シンプルな Scan コード例です

const aws = require('aws-sdk');
const tableName = "テーブル名"
let dynamoDB = new aws.DynamoDB.DocumentClient({
    region: 'ap-northeast-1'
})
let DynamoDBScanAll = async () => {
    return await dynamoDB.scan({TableName: tableName}).promise()
}

Promise.all([DynamoDBScanAll()]).then((threadList) => {
    threadList.forEach(scanAllRes => {
        let res = JSON.stringify(scanAllRes.Items)
        console.log(res)
    })
})

上記コードの場合 「1 回の Scan リクエストで、最大 1 MB のデータを取得」 なので 全件数を 取得できません。

テーブル内の全レコード Scan する場合の コード例

下↓の コード例は、 LastEvaluatedKey == nullになるまで ループし スキャンを続けます。

const aws = require('aws-sdk');
const tableName = "テーブル名"
let dynamoDB = new aws.DynamoDB.DocumentClient({
    region: 'ap-southeast-2'
})
let DynamoDBScanAll = async () => {
    let ScanAll = []
    let LastEvaluatedKey = null;
    let loop = true
    try{
        while(loop){ //ループ開始
            let scanRes = {};
            let param = {TableName: tableName, ExclusiveStartKey: LastEvaluatedKey};
            scanRes = await dynamoDB.scan(param).promise() //スキャン実行
            ScanAll = ScanAll.concat(scanRes.Items) //配列結合
            LastEvaluatedKey =  (scanRes['LastEvaluatedKey'] != null) ? scanRes['LastEvaluatedKey'] : null
            if (LastEvaluatedKey == null) //LastEvaluatedKeyがnullならループ終了
                loop = false
            else
                console.log(JSON.stringify(LastEvaluatedKey))
        }
    
    } catch(e){
        console.log(e)
    }
    return ScanAll
}

Promise.all([DynamoDBScanAll()]).then((threadList) => {
    threadList.forEach(scanAllRes => {
        let res = JSON.stringify(scanAllRes)
        console.log(res)
    })
})

2回目以降のスキャンは、 scanパラメータに ExclusiveStartKeyを含め処理します。

dotnet 6.0 macOS DynamoDBテーブル Describe取得

dotnet 6.0 macOS DynamoDBテーブル Describe取得

.NET6 C#を使って、 DynamoDB テーブルの詳細情報を取得します。

dotnet new console の後、 nugetからAWSSDK.DynamoDBv2パッケージをAddします。

dotnet add package AWSSDK.DynamoDBv2 --version 3.7.3.26

パッケージ内のDescribeTableAsync()を使えば、 テーブルの詳細情報を取り出せます。

DynamoDB上に「test-table」テーブルを作成

DynamoDB テーブル作成

パーティションキー = partition-num
ソートキー = sort-moji

このDynamoDBで作成したテーブルの詳細情報を.NET6 C#を使って取り出します

using Amazon;
using Amazon.DynamoDBv2;

var dynamodb = new AmazonDynamoDBClient("アクセスキー","シークレット", RegionEndpoint.APNortheast1);
try{
    var describeTask = dynamodb.DescribeTableAsync("test-table");
    var describe = describeTask.Result;
    Console.WriteLine("テーブルARN={0}",describe.Table.TableArn);
    foreach (var att in describe.Table.AttributeDefinitions){
        Console.WriteLine("AttributeDefinition KeyName={0} Type={1}",att.AttributeName,att.AttributeType.Value);            
    }
    Console.WriteLine("テーブル作成日={0}", describe.Table.CreationDateTime.ToString());
    Console.WriteLine("総レコード={0}", describe.Table.ItemCount);
    Console.WriteLine("TableSizeBytes={0}", describe.Table.TableSizeBytes);
} catch(Exception _e){
    Console.WriteLine(_e);
}

実行結果

テーブルの、 作成日・総レコード数・テーブルの サイズなども取得できています

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED