paws::dynamodb query()返回属性及其所有可能的值类型

r3i60tvu  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(86)

我正在使用R中库paws.database中函数dynamodb的操作query
运行查询时:

response = svc$query(
  ExpressionAttributeValues = list(
    `:v1` = list(
      S = "request-grant-generation"
    )
  ),
  TableName = table_name,
  KeyConditionExpression = "dumpType = :v1"
)

字符串
这将返回一个5的列表。数据在Items元素中。
每条记录都有8个属性。每个属性返回所有可能的数据类型,并且在正确的数据类型中只有**数据。下面是一个例子,其中第一条记录在项目中,第一个属性(版本)。

> response$Items[[1]]$version
$S
[1] "1"

$N
character(0)

$B
character(0)

$SS
list()

$NS
list()

$BS
list()

$M
list()

$L
list()

$`NULL`
logical(0)

$BOOL
logical(0)


有没有办法告诉paws.databasedynamodb不要返回所有可能的类型,而是返回数据库中的类型?因为否则我需要解析响应并删除所有不适用的值类型,并保留其中有值的类型。

n7taea2i

n7taea2i1#

找到一个解析列表的解决方案。
使用rlist库解决起来非常简单,文档为here
解决所示示例的代码行为:

library("rlist")
list.clean(response, function(x) length(x) == 0L, recursive = TRUE))

字符串
希望有人发现它有用。
我的数据库没有空记录。如果你有一个需要保留的空属性的数据库,你应该修改函数中的比较或引用一个更专门的比较。
这是一个干净的框架:

# Flatten DynamoDB query response, which has only attribute names and values.
flatten <- function(x) {
 result <- list() for (name in names(x)) {
 result[[name]] <- get_value(x[[name]]) 
} 
return(result) 
} 

get_value <- function(x) {
 element <- names(x)[sapply(x, function(el) length(el) > 0)] if (is_empty(element)) return("") return(x[[element]]) 
}

相关问题