我知道正在开展工作来改进 Bigquery 上的联接功能,不是在这里咆哮,但如果不能正确使用联接,将很难分析“广告”的“太字节”数据集。
好吧,回到问题,我有两个表,一个是 600 Megs,另一个是 50 Megs,我确实尝试进行连接,但出现了关于必须保留较小表的错误。我做了一些研究,我发现Bigquery
如果两个表都大于 7MB,则认为它们很大?
因此,根据我在网上找到的一些建议,我确实选择了较小表的相关数据集并将其保存在一个新表中,新数据集为 12MB,两列包含 600K 行。然后我再次尝试查询,但仍然收到相同的错误:
Query Failed : Error: Large table cdrs_test.geoIP_Left must appear as the leftmost table in a join query
geoIP_Left 是 12 Megs,另一个表是 600Megs..
这个问题能以某种方式解决吗还是我被抓了?如果是这样,有人知道我可以用来分析支持连接的大数据集的任何其他服务吗?
编辑:这是实际的查询;
SELECT COUNT(results.cc_card) AS count,
sum(results.sessiontime) AS time,
geoIP_Left.place AS place
FROM cdrs_test.cdrs_2010_5 AS results
JOIN cdrs_test.geoIP_Left AS geoIP_table
ON results.cc_card = geoIP_table.vcard
WHERE results.sessiontime > 0 AND results.countryName Contains 'India'
GROUP BY place;
您可以将此查询表示为仅引用来自的列的子选择cdrs_test.geoIP_Left
您感兴趣的。请参阅第二个示例here https://developers.google.com/bigquery/docs/query-reference#smalljoin.
SELECT
COUNT(results.cc_card) AS count,
sum(results.sessiontime) AS time,
geoIP_table.place AS place
FROM
cdrs_test.cdrs_2010_5 AS results
JOIN
(SELECT place, vcard FROM cdrs_test.geoIP_Left)
AS
geoIP_table
ON
results.cc_card = geoIP_table.vcard
WHERE
results.sessiontime > 0 AND results.countryName CONTAINS 'India'
GROUP BY
place;
您还可以简单地运行多个查询 - 请注意,您可以将查询结果显式保存为命名表,并在以后的查询中使用该表。
最后,另一种选择是使用(例如)MapReduce 转换管道或ETL tool https://developers.google.com/bigquery/docs/third_party_tools由 BigQuery ETL 合作伙伴之一提供。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)