2015-08-05 21 views
7

Tôi đang cố gắng truy vấn bảng dynamodb của mình để lấy feed_guid và status_id = 1. Nhưng nó trả về lỗi điều kiện khóa truy vấn không được hỗ trợ. Vui lòng tìm sơ đồ và truy vấn bảng của tôi.Lỗi truy vấn Dynamodb - Điều kiện khóa truy vấn không được hỗ trợ

$result =$dynamodbClient->createTable(array(
      'TableName' => 'feed', 
      'AttributeDefinitions' => array(
       array('AttributeName' => 'user_id', 'AttributeType' => 'S'), 
       array('AttributeName' => 'feed_guid', 'AttributeType' => 'S'), 
       array('AttributeName' => 'status_id', 'AttributeType' => 'N'), 
      ), 
      'KeySchema' => array(
       array('AttributeName' => 'feed_guid', 'KeyType' => 'HASH'), 
      ), 

      'GlobalSecondaryIndexes' => array(
       array(
        'IndexName' => 'StatusIndex', 
        'ProvisionedThroughput' => array (
         'ReadCapacityUnits' => 5, 
         'WriteCapacityUnits' => 5 
        ), 
        'KeySchema' => array(
         array(
          'AttributeName' => 'status_id', 
          'KeyType' => 'HASH' 
         ), 
        ), 
        'Projection' => array(
         'ProjectionType' => 'ALL' 
        ) 
       ), 

       array(
        'IndexName' => 'UserIdIndex', 
        'ProvisionedThroughput' => array (
         'ReadCapacityUnits' => 5, 
         'WriteCapacityUnits' => 5 
        ), 
        'KeySchema' => array(
         array(
          'AttributeName' => 'user_id', 
          'KeyType' => 'HASH' 
         ), 
        ), 
        'Projection' => array(
         'ProjectionType' => 'ALL' 
        ) 
       ) 

      ), 
      'ProvisionedThroughput' => array(
       'ReadCapacityUnits' => 10, 
       'WriteCapacityUnits' => 20 
      ) 
     )); 

Sau đây là truy vấn của tôi để cập nhật bảng đó.

$result = $dynamodbClient->query(array(
      'TableName' => 'feed', 
      'KeyConditionExpression' => 'feed_guid = :v_fid AND status_id = :v_sid ', 
      'ExpressionAttributeValues' => array(
       ':v_fid' => array('S' => '71a27f0547cd5456d9ee7c181b6cb2f8'), 
       ':v_sid' => array('N' => 1) 
      ), 
      'ConsistentRead' => false 
     )); 
+0

bạn chưa xác định status_id như phạm vi để thực hiện truy vấn này –

+0

Vì vậy, chúng ta không thể sử dụng chỉ số trung chỉ? –

Trả lời

8

Như đã đề cập, các thuộc tính bao gồm trong "KeyConditionExpression" nên là chìa khóa hash của bạn chỉ, phù hợp với sơ đồ bảng cơ sở của bạn (trong trường hợp này 'feed_guid'). Nếu bạn muốn truy vấn trên cả 'feed_guid' và 'status_id', bạn cần phải tạo bảng có khóa băm và phạm vi và chỉ định 'status_id' làm khóa phạm vi của bạn.

Chỉ mục phụ toàn cục hoàn toàn tách biệt với bảng cơ sở, vì vậy trong trường hợp này bạn có thể truy vấn chỉ mục riêng biệt (sử dụng 'status_id' trong điều kiện khóa khi truy vấn StatusIndex và sử dụng 'user_id' trong điều kiện khóa khi truy vấn UserIdIndex).

Vui lòng xem thêm chi tiết về truy vấn chỉ số trung toàn cầu here

Các vấn đề liên quan