我在Cosmos中有一个文档结构,通常看起来像这样:
{
"Item No": "123456",
"Item Desc": "This is a description.",
"images": {
"https://somedomain.com/image1.png",
"https://somedomain.com/image2.png",
}
}
有时,图像值会为空,例如:
{
"Item No": "123456",
"Item Desc": "This is a description.",
"images": {
"",
""
}
}
我已经编写了一个UDF(用户定义函数),它将使用默认值替换所有空值:
function missingImage(doc, prop) {
if (typeof doc[prop] === "undefined" || doc[prop] === "" || doc[prop] === null) {
return "https://via.placeholder.com/150";
}
}
如果图片网址为空白,我会返回此返回值(正确):
{
"id": "e3842b29-313c-4a84-bc94-bc43a9a55742",
"Item No": "123456",
"Item Desc": "This is a description.",
"image": "https://via.placeholder.com/150"
},
我的SELECT
查询如下:
"c.id, c['Item No'], c['Item Desc'], udf.missingImage(c.images[0]) as image"
但是,在根本没有图像键的情况下,例如:
{
"Item No": "123456",
"Item Desc": "This is a description."
}
我没有恢复默认值。
我的问题:如何修改UDF或查询,以使如果images
键不存在,我仍然返回默认值?
答案 0 :(得分:0)
首先,您提供的示例文档的json格式不正确。
我想应该是这样的:
您可以修改udf函数,例如:
maven { url 'https://mapbox.bintray.com/mapbox' }
然后使用sql确保结果中没有“”值:
function missingImage(images) {
for(var i =0;i<images.length;i++){
if (typeof images[i] === "undefined" || images[i] === "" || images[i] === null) {
images[i] = "https://via.placeholder.com/150";
}
}
return images;
}
答案 1 :(得分:0)
感谢@ jay-gong的时间和答复,但这不能解决问题。我正在寻找一种在文档中根本没有print(message)
DataFrames created using Dask and Pandas are equivalent.
键的情况下返回默认值的方法。
我觉得这里的答案不是通过UDF,而是需要在查询级别解决。我基于这样一个事实:如果直接返回默认值(如下面的UDF示例所示),无论如何我都不会返回images
。
Cosmos中的文档:
images
UDF:
{
"id": "8fdc9f47-6209-455d-9b9c-482341bb3170",
"Item No": "123456",
"Item Desc": "This is a description."
}
查询:
function missingImage(images) {
return "https://via.placeholder.com/150";
}
返回:
SELECT c.id, c['Item No'], c['Item Desc'], udf.missingImage(c.images) FROM c
更新:
我提出了一个解决方案,该解决方案是使用[
{
"id": "8fdc9f47-6209-455d-9b9c-482341bb3170",
"Item No": "123456",
"Item Desc": "This is a description."
}
]
检查是否定义了IS_DEFINED
键。如果不是,则返回false,这使我可以在UDF中采取措施。
查询:
images
UDF:
SELECT c.id,
c['Item No'],
c['Item Desc'],
udf.missingImage((IS_DEFINED(c.images) = true ? c.images : false))
FROM c