我在Google BigQuery中有一个表,它由几个字段组成,然后是一个可能包含一个或多个对象的重复记录。我想在重复数据中创建一个新表,其中包含一个额外字段,并将原始数据复制到新表中,用GENERATE_UUID()的输出填充新字段,以便每个重复数据行都有一个唯一标识符。
我有一个类似的问题,当目标包含重复字段时,如何从一个BigQuery表复制到另一个?但我不知道如何调整它以适应我当前的用例。
这是我的“新”架构1(即上面链接中的架构2)
[
{"name": "id", "type": "NUMERIC", "mode": "REQUIRED"},
{"name": "name", "type": "STRING", "mode": "REQUIRED"},
{"name": "created", "type": "TIMESTAMP", "mode": "REQUIRED"},
{"name": "valid", "type": "BOOLEAN", "mode": "REQUIRED"},
{"name": "parameters", "type": "RECORD", "mode": "REPEATED", "fields":
[
{"name": "parameter1", "type": "STRING", "mode": "REQUIRED"},
{"name": "parameter2", "type": "FLOAT", "mode": "REQUIRED"},
{"name": "parameter3", "type": "BOOLEAN", "mode": "REQUIRED"}
]
}
]
我希望它像这样结束,模式2:
[
{"name": "id", "type": "NUMERIC", "mode": "REQUIRED"},
{"name": "name", "type": "STRING", "mode": "REQUIRED"},
{"name": "created", "type": "TIMESTAMP", "mode": "REQUIRED"},
{"name": "valid", "type": "BOOLEAN", "mode": "REQUIRED"},
{"name": "parameters", "type": "RECORD", "mode": "REPEATED", "fields":
[
{"name": "uuid", "type": "STRING", "mode": "REQUIRED"},
{"name": "parameter1", "type": "STRING", "mode": "REQUIRED"},
{"name": "parameter2", "type": "FLOAT", "mode": "REQUIRED"},
{"name": "parameter3", "type": "BOOLEAN", "mode": "REQUIRED"}
]
}
]
因此,我使用此架构创建了我的新表(表 2)。我想从表 1 复制,我正在尝试类似这样的方法:
insert into table2_with_uuid(id, name, created, valid, parameters)
select id, name, created, valid,
[(
GENERATE_UUID(), parameters.parameter1, parameters.parameter2, parameters.parameter3
)]
from table1_no_guid;
这给了我一个错误:<code>无法访问数组类型的值的字段ceId
有没有人对如何进行有任何建议?谢谢!
就在我发布之前,我设法找到了这个问题的答案——但我认为分享这个方法对其他人会很有用。以下是有效的查询:
insert into table2_with_uuid(id, name, created, valid, parameters)
select id, name, created, valid,
[(
GENERATE_UUID(), params.parameter1, params.parameter2, params.parameter3
)]
from table1_no_guid, UNNEST(parameters) params;
希望这是有用的!请随时添加到我的结果或评论中以继续对话。
每个人都正确。也不正确。unnest将原始数据替换为每个重复记录一行。尝试此查询:
insert into dummydata_withuuid (id, name, created, valid, parameters)
select id, name, created, valid,
[(
GENERATE_UUID(), parameters.parameter1, parameters.parameter2, parameters.parameter3
)]
from dummydata_nouuid;
在第一个参数上显示错误。参数1,"无法访问数组类型的值上的字段参数1
但是,移除< code >插入到...并修改如下行,查询有效。
-- insert into dummydata_withuuid (id, name, created, valid, parameters)
select id, name, created, valid,
[(
GENERATE_UUID(), parameters
)]
from dummydata_nouuid;
我可以将结果保存为另一个表,这离得到我需要的答案还有很长的路要走。在我的<code>插入到…</code>行中是否需要修改某些内容以使查询有效?
我遵循了官方文档中数据操作语言语法中的过程。
然后,基本上您想要的是更新重复的记录。我遵循了所有示例,从插入到更新,直到在重复记录中添加第二条评论的那一刻。
然后我应用了UNNEST查询:
insert into `testing.followingDMLmod` (product, quantity, supply_constrained, comments)
select product, quantity, supply_constrained,
[(
GENERATE_UUID(), com.created, com.comment
)]
from `testing.followingDML` , UNNEST(comments) com;
这当然起作用,但不提供期望的结果。
根据官方文档,“BigQuery本身支持一些模式更改,比如向记录中添加一个新的嵌套字段,或者放松嵌套字段的模式。”然后,可能路径是复制表,然后添加额外的字段。
这可以通过管理表模式文档来完成。也就是说,要么使用API并调用tables.patch,这在另一篇堆栈溢出文章中有更详细的讨论,要么从命令行使用带有模式的JSON文件。
我个人遵循了第二种方法(JSON模式文件),并且非常适合我。更详细地说,我遵循的步骤是(如这里所示):
>
在BigQuery UI中使用Copy table获取没有“id”的表的副本。我的起始表在DML之后,副本在DMLmod之后。
通过在 Cloud Shell 中运行以下命令,将表中的架构复制到 JSON 文件(此处称为 myschema.json)中
bq show \
--schema \
--format=prettyjson \
testing.followingDMLmod > myschema.json
vim myschema.json
{
"mode": "NULLABLE",
"name": "id",
"type": "STRING"
}
bq update testing.followingDMLmod myschema.json
最后,回到BigQuery UI,我使用了查询
UPDATE `testing.followingDMLmod`
SET comments = ARRAY(
SELECT AS STRUCT * REPLACE(GENERATE_UUID() AS id)
FROM UNNEST(comments)
)
WHERE true
以在创建后填充 id 字段。按照此堆栈溢出帖子中的建议进行操作。现在,最终结果确实是预期的!
在log4j1.2中,您只需在运行时获取一个记录器并添加一个appender。例如,这对于测试目的很方便。我们曾经创建一个模拟appender并将其添加到记录器中。随后,我们可以做出不同的断言。 log4j2的等价物是什么? 例如,这个例子展示了其他人是如何添加测试附加器的。 log4j2页面显示了一些关于如何添加附加器的示例。但是,它们将追加器添加到整个上下文中。这似乎不同于为一个特定的记录器添
我计划每天向BigQuery表添加增量数据。每次向现有表添加增量数据时,我都希望从表中现有数据中消除重复记录(基于主键列)。一种方法是:- 从增量数据中收集密钥集(让我们称之为) 在 - 行上运行查询,并将结果存储在新表中。 将增量数据追加到新表中。 我对这种方法的担忧是,它会创建一个大桌子的副本,并添加到我的账单中。 有没有更好的方法可以在不创建重复表的情况下实现相同的目标?
问题内容: 我在任何地方都找不到它,所以您的帮助对我非常有用:)这是该字段: FragmentCategory: 这是发送的表格: 我尝试过这样的事情: categories = fragmentCategory.objects.get(id=1), 要么: 问题答案: Django文档的整个页面都专门针对此内容,并从内容页面进行了索引。 如该页面所述,你需要执行以下操作: 要么
我正在尝试访问record2中的“AccountNumber”字段的数据作为“属性”。文件格式为平面文件(format=“fixedlength”)。请帮帮我。 示例数据:
问题内容: 我有一个json文件: 和一种形式: 我想知道将多个json记录加载到多个表单元素中的正确sintax是什么?您想要修改的表单之类的值会被查询到这些字段中 我知道我可以使用: 但我被困在这里,谢谢 问题答案: 或者,如果您的数据返回是字段名值对,例如: 你可以这样做:
我有下表: 选择*结果JSON schema JSON: 我想通过cust_id和重复的字段来过滤它们的值,所以查询如下: 查询的预期输出: JSON格式查询的预期输出: 受这个问题的启发BigQuery:用标准SQL过滤重复字段我试试这个查询: 哪个输出: 输出JSON: 输出结果是不一样的,我想有,我如何才能实现这一点?