当前位置: 首页 > 知识库问答 >
问题:

发电机B;获取表中的所有数据-PHP

云和惬
2023-03-14

我在这里找到了一些关于如何通过链接的答案来完成这项工作的帮助。但它不适合我的用例。我的目标是获取DynamoDB表中的所有记录(用户名和电子邮件)。查看文档时,我必须使用LastEvaluatedKey或ExclusiveStartKey来实现分页。任何指导都将不胜感激。

谢谢

共有2个答案

刁文光
2023-03-14

我不知道PHP,但这里有一个针对DynamoDB Local运行的Java 8示例,它依赖于编译组:'com.amazonaws',名称:'aws Java sdk',版本:'1.10.20'。这显示了Limit(大部分情况下,它不显示过滤器如何影响返回的项目)、LastEvaluatedKeyExclusiveStarKey的工作方式。您可以看到参数是如何设置的,并将其与PHP示例进行比较:

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
import com.amazonaws.services.dynamodbv2.model.KeyType;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType;
import com.amazonaws.services.dynamodbv2.model.ScanRequest;
import com.amazonaws.services.dynamodbv2.model.ScanResult;
import com.amazonaws.services.dynamodbv2.util.Tables;
import com.google.common.collect.ImmutableList;

import java.util.Map;

public class ScanExample {

    private static final String TABLE_NAME = "test_table";
    private static final String HASH_ATTR_NAME = "hash";

    public static void main(String[] args) throws InterruptedException {
        AWSCredentials awsCredentials = new BasicAWSCredentials("key", "secret");
        AmazonDynamoDB dynamoDBClient = new AmazonDynamoDBClient(awsCredentials);
        dynamoDBClient.setEndpoint("http://localhost:4000");

        if (Tables.doesTableExist(dynamoDBClient, TABLE_NAME)) {
            dynamoDBClient.deleteTable(TABLE_NAME);
        }

        CreateTableRequest createTableRequest = new CreateTableRequest();
        createTableRequest.setTableName(TABLE_NAME);
        createTableRequest.setProvisionedThroughput(new ProvisionedThroughput(50l, 50l));

        createTableRequest.withKeySchema(
                ImmutableList.of(new KeySchemaElement(HASH_ATTR_NAME, KeyType.HASH)))
                .withAttributeDefinitions(ImmutableList.of(
                                new AttributeDefinition(HASH_ATTR_NAME, ScalarAttributeType.N))
                );

        dynamoDBClient.createTable(createTableRequest);
        Tables.awaitTableToBecomeActive(dynamoDBClient, TABLE_NAME);

        final Table table = new DynamoDB(dynamoDBClient).getTable(TABLE_NAME);
        createItems(table, 8);

        final int limit = 3;
        performScan(dynamoDBClient, limit);
    }

    private static void performScan(final AmazonDynamoDB client, final int limit) {
        ScanRequest scanRequest = new ScanRequest(TABLE_NAME)
                .withLimit(limit);

        Map<String, AttributeValue> exclusiveStartKey = null;
        do {
            final ScanResult scanResult = client.scan(scanRequest);
            System.out.println("With exclusiveStartKey=" + exclusiveStartKey);
            scanResult.getItems().forEach(System.out::println);
            exclusiveStartKey = scanResult.getLastEvaluatedKey();
            System.out.println("Result lastEvaluatedKey=" + exclusiveStartKey);
            // Reusing same request object, just setting the start key
            scanRequest.setExclusiveStartKey(exclusiveStartKey);
            System.out.println();
        } while(exclusiveStartKey != null);
    }

    private static void createItems(final Table table, final int n) {
        for (int i = 0; i < n; i++) {
            table.putItem(new Item().withNumber(HASH_ATTR_NAME, i));
        }
    }
}

示例输出:

With exclusiveStartKey=null
{hash={N: 2,}}
{hash={N: 1,}}
{hash={N: 3,}}
Result lastEvaluatedKey={hash={N: 3,}}

With exclusiveStartKey={hash={N: 3,}}
{hash={N: 5,}}
{hash={N: 7,}}
{hash={N: 0,}}
Result lastEvaluatedKey={hash={N: 0,}}

With exclusiveStartKey={hash={N: 0,}}
{hash={N: 6,}}
{hash={N: 4,}}
Result lastEvaluatedKey=null
魏成济
2023-03-14

此查询将能够从DynamoDB表中获取所有记录。

function scanAllData($table,$limit){

  $result = $this->getClientdb()->scan(array(
        'TableName' => $table,
        'Limit' => $limit,
        'Select' => 'ALL_ATTRIBUTES'                
     ),
    array('limit' => $limit),
  );
    return $result['Items'];
}

你可以这样调用这个函数。例如,你有用户表,列是用户名和电子邮件

$getobj = $this->scanAllData('users','10');

foreach($getobj as $cols){

   echo $cols['usernames']['S'];
   echo $cols['emails']['S'];    

}
 类似资料:
  • 我正在尝试获取数据库(Oracle 11g)中的所有表名,以便为UI中的每个表动态生成复选框。我没有映射.cfg.xml文件中的任何这些表。 我使用了下面的代码: 但它的错误如下:组织。冬眠hql。内部的ast。QuerySyntaxException:未映射user\u表[从user\u表中选择table\u名称] 请告诉我是否有任何方法可以在Hibernate 4中获取所有表名

  • 来自Azure的DocumentDB(Cosmos db)后台到AWS DynamoDB,用于已经使用dynamo db的应用程序。 我对DynamoDB上的分区键感到困惑。 据我所知,分区键用于在数据增长时将数据隔离到不同的分区,但是许多人建议使用主键作为分区键,例如用户ID、客户ID、订单ID。在这种情况下,我不确定我们如何获得更好的性能,因为我们有很多分区。所以一个查询可能需要在多个服务器上

  • 本文向大家介绍Layui数据表格之获取表格中所有的数据方法,包括了Layui数据表格之获取表格中所有的数据方法的使用技巧和注意事项,需要的朋友参考一下 数据表格中的数据是通过直接赋值的方式。这里实际上思想是反过来的,将拿数据表格中的所有数据,转换为Layui数据表格拿原始数据去渲染数据表格。 1、创建一个作用域合适的JS对象数组用来保存数据表格中的原始数据。 2、将上一步创建的JS对象数组也就是原

  • 问题内容: 有没有一种方法可以获取MySQL数据库中所有表的行数而不在每个表上运行? 问题答案: 不过请从文档中注意:对于InnoDB表, 行数只是 SQL优化中使用 的粗略估计 。您需要使用COUNT(*)进行精确计数(这更昂贵)。

  • 查询是什么来获取雪花数据库中所有表的行数。

  • 问题内容: 获取Oracle中所有表的列表? 问题答案: 假设您有权访问DBA_TABLES数据字典视图。如果您没有这些特权但需要它们,则可以请求DBA显式授予您对该表的特权,或者请求DBA授予您该SELECT ANY DICTIONARY特权或SELECT_CATALOG_ROLE角色(这两者都将允许您查询任何数据字典表) )。当然,您可能希望排除某些模式,例如SYS和模式,SYSTEM而这些模