AWS Dynamodb 扫描 |扫描是否存在列值
AWS Dynamodb Scan | Scan if exists column values
我有一个 table 有一个名为“items”的列,但不是所有行都有它,所以我想扫描所有有“items”的行。
类似于:
$resposta = $clientDB->scan(array(
'TableName' => 'tableName',
'Key' => [
'items' => ['S' => 'exists']
]
));
但是我不知道该怎么做...
table有10000行,但是只有10行有“items”,我只想获取这10行。
编辑:
正如 Seth Geoghegan 在下面指出的那样,有必要为我要过滤的属性创建一个全局二级索引。
我最终来到这里:
$params = [
'TableName' => 'tableName',
'FilterExpression' => "attribute_exists(items)"
];
或
$params = [
'TableName' => 'tableName',
'FilterExpression' => 'items != :null',
'ExpressionAttributeValues' => [
':null' => null,
],
];
但两者都没有用...第一个看到需要设置的 ExpressionAttributeValues,第二个 php 停止工作,没有错误日志。
这是全球二级索引 (GSI) 的完美用例!
您可以在 items
属性上创建 GSI。定义了 items
属性的项目将投影到 GSI 中。重要的是,not 包含此属性的项目将 not 包含在索引中。然后您可以查询 GSI 并检索您想要的项目。
好吧,经过一番努力,我找到了一个方法:
$resposta = $clientDB->scan(array(
'TableName' => 'tableName',
'FilterExpression' => "attribute_exists(items)"
));
在我为“items”(由 Seth Geoghegan 指出)创建了另一个全局二级索引 (GSI) 之后,我只需要在扫描函数中添加 FilterExpression "attribute_exists(items") 和它成功了。
我有一个 table 有一个名为“items”的列,但不是所有行都有它,所以我想扫描所有有“items”的行。
类似于:
$resposta = $clientDB->scan(array(
'TableName' => 'tableName',
'Key' => [
'items' => ['S' => 'exists']
]
));
但是我不知道该怎么做...
table有10000行,但是只有10行有“items”,我只想获取这10行。
编辑:
正如 Seth Geoghegan 在下面指出的那样,有必要为我要过滤的属性创建一个全局二级索引。
我最终来到这里:
$params = [
'TableName' => 'tableName',
'FilterExpression' => "attribute_exists(items)"
];
或
$params = [
'TableName' => 'tableName',
'FilterExpression' => 'items != :null',
'ExpressionAttributeValues' => [
':null' => null,
],
];
但两者都没有用...第一个看到需要设置的 ExpressionAttributeValues,第二个 php 停止工作,没有错误日志。
这是全球二级索引 (GSI) 的完美用例!
您可以在 items
属性上创建 GSI。定义了 items
属性的项目将投影到 GSI 中。重要的是,not 包含此属性的项目将 not 包含在索引中。然后您可以查询 GSI 并检索您想要的项目。
好吧,经过一番努力,我找到了一个方法:
$resposta = $clientDB->scan(array(
'TableName' => 'tableName',
'FilterExpression' => "attribute_exists(items)"
));
在我为“items”(由 Seth Geoghegan 指出)创建了另一个全局二级索引 (GSI) 之后,我只需要在扫描函数中添加 FilterExpression "attribute_exists(items") 和它成功了。