当我有潜在的重复行时,我应该如何每天在 BigQuery 中导入数据?
这是一些背景信息。我每天都会将数据从电子表格更新到 BigQuery。我正在使用 Google App Script 和简单的 WRITE_APPEND 方法。
有时我会导入前一天已经导入的数据。所以我想知道如何避免这种情况?
我可以构建一个 SQL 查询来每天清除表中的重复行吗?或者,即使在导入它们之前也可以检测到重复项(例如,使用我的作业定义中的某些特定命令......)?
谢谢 !
我有一个包含许多重复行的表 - 但我只想一次删除一个分区的重复行。
我怎样才能做到这一点?
例如,您可以从按日期分区并填充 1 到 5 的随机整数的表开始:
CREATE OR REPLACE TABLE `temp.many_random`
PARTITION BY d
AS
SELECT DATE('2018-10-01') d, fhoffa.x.random_int(0,5) random_int
FROM UNNEST(GENERATE_ARRAY(1, 100))
UNION ALL
SELECT CURRENT_DATE() d, fhoffa.x.random_int(0,5) random_int
FROM UNNEST(GENERATE_ARRAY(1, 100))
Run Code Online (Sandbox Code Playgroud) 当我尝试来自 Michael 的 bigquery 片段时,我遇到了“401 Unauthorized”问题当我在我的计算机上尝试使用 Michael 的这篇文章。按照 ryguyrg 的建议,我同步了我的计算机时间(通过单击“立即更新”\xef\xbc\x89 并且代码有效。但问题是,过了一会儿,也许几分钟,当我重新运行代码时,它再次失败出现 401 错误。因此,几乎每次我想运行大查询请求时,我都必须手动同步计算机时间。
\n\n我很确定我的计算机运行良好,并且时间与服务器的差异不应超过几毫秒。那么到底是什么导致了这个问题呢?我应该尝试在请求之前同步代码中的时间吗?还是有更好的方法?
\n\n下面是401错误信息供参考:
\n\nException in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized\n at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:159)\n at com.google.api.client.googleapis.json.GoogleJsonResponseException.execute(GoogleJsonResponseException.java:187)\n at com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:115)\n at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:112)\n at com.google.api.services.bigquery.Bigquery$Jobs$Insert.executeUnparsed(Bigquery.java:1418)\n at com.google.api.services.bigquery.Bigquery$Jobs$Insert.execute(Bigquery.java:1442)\n at BigQueryJavaServiceAccount.main(BigQueryJavaServiceAccount.java:83)\nRun Code Online (Sandbox Code Playgroud)\n 因为我们计划将数据从Teradata迁移到谷歌云(Bigquery).在Teradata中,我们拥有主要和外国等关键概念,借助这些键,我们可以定义维度和事实之间的关系.
比方说,我有3个维度表和一个事实表,如下所示.
D1 D2 D3
F1
借助Teradata中的键或索引,我们可以从事实表中获取数据.
当来到Bigquery时,我们没有像键或索引那样的概念,那么我们将如何定义维度和事实之间的关系
注意:如果没有主键或索引概念,我们将如何消除重复项