Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 按分片分组:基数太高或查询超时_Google Bigquery - Fatal编程技术网

Google bigquery 按分片分组:基数太高或查询超时

Google bigquery 按分片分组:基数太高或查询超时,google-bigquery,Google Bigquery,我正在对每个人进行分组,并在巨大的表上加入每个查询。因为分组键的基数太高,所以我像这样“切分”查询:(简化示例) 现在的问题是,我的表需要太多的切块来防止分组键太大,导致整个查询变得太慢并导致超时 我可能可以通过将所有碎片作为单独的查询运行并将中间结果存储在临时表中来解决这个问题。但我真的很想解决这个问题,而不必创建额外的表(这将导致额外的成本) 有什么建议吗 下面是一个有此问题的查询(我使用coffeescript生成切分查询) 请分享一个工作ID,也许BQ团队的人可以看到它的表现。job_D

我正在对每个人进行分组,并在巨大的表上加入每个查询。因为分组键的基数太高,所以我像这样“切分”查询:(简化示例)

现在的问题是,我的表需要太多的切块来防止分组键太大,导致整个查询变得太慢并导致超时

我可能可以通过将所有碎片作为单独的查询运行并将中间结果存储在临时表中来解决这个问题。但我真的很想解决这个问题,而不必创建额外的表(这将导致额外的成本)

有什么建议吗

下面是一个有此问题的查询(我使用coffeescript生成切分查询)


请分享一个工作ID,也许BQ团队的人可以看到它的表现。job_D4rqS9b4MPxMt9uPniO9Z0Lq0qQ(这一个实际上成功了)期望外部方“神奇地”通过特殊工具来解决问题是不好的。堆栈溢出用于定义的问题和答案,而不是作为一个免费的1对1支持通道。OP,您的查询似乎非常嵌套和复杂。BigQuery不是为任意复杂的查询而设计的,而是为大型数据集上中等复杂的查询而设计的。我认为应该使用一种更直接的方法来发挥BigQuery的优势,而不是试图对碎片和嵌套查询太过棘手。你目前的问题对于StackOverflow来说太宽泛了,并且有许多可能的优化/解决方案可以建议。请分享一个工作ID,也许BQ团队的人可以看到它的表现。job_D4rqS9b4MPxMt9uPniO9Z0Lq0qQ(这一个实际成功)期待外部方“神奇地”出现是不好的来吧,用专门的工具来研究这个问题。堆栈溢出用于定义的问题和答案,而不是作为一个免费的1对1支持通道。OP,您的查询似乎非常嵌套和复杂。BigQuery不是为任意复杂的查询而设计的,而是为大型数据集上中等复杂的查询而设计的。我认为应该使用一种更直接的方法来发挥BigQuery的优势,而不是试图对碎片和嵌套查询太过棘手。你目前的问题对于StackOverflow来说太宽泛了,并且有许多可能的优化/解决方案可以建议。请分享一个工作ID,也许BQ团队的人可以看到它的表现。job_D4rqS9b4MPxMt9uPniO9Z0Lq0qQ(这一个实际成功)期待外部方“神奇地”出现是不好的来吧,用专门的工具来研究这个问题。堆栈溢出用于定义的问题和答案,而不是作为一个免费的1对1支持通道。OP,您的查询似乎非常嵌套和复杂。BigQuery不是为任意复杂的查询而设计的,而是为大型数据集上中等复杂的查询而设计的。我认为应该使用一种更直接的方法来发挥BigQuery的优势,而不是试图对碎片和嵌套查询太过棘手。您目前的问题对于StackOverflow来说太广泛了,并且有许多可能的优化/解决方法可以建议。
SELECT key FROM 
  (SELECT key FROM [table] WHERE ABS(HASH(key) % 2 = 0),
  (SELECT key FROM [table] WHERE ABS(HASH(key)) % 2 = 1)
"SELECT * FROM " +
(
    """
    (SELECT
        key, NEST(things) as things, FIRST(category) as category
    FROM
        (SELECT
            things, key, category, events,
            RATIO_TO_REPORT(events) OVER (PARTITION BY key) AS presence
        FROM (
            SELECT
                a.key as key, a.category as category
                a.things as things, a.events as events
            FROM [table1] a
            JOIN EACH (
                SELECT key FROM [table2]
                WHERE things BETWEEN 2 AND 10 AND ABS(HASH(key)) % #{shards} = #{shard}
            ) b
            ON a.key = b.key
            WHERE ABS(HASH(a.key)) % #{shards} = #{shard}))
    WHERE presence > 0.1 AND ABS(HASH(key)) % #{shards} = #{shard}
    GROUP EACH BY key
    HAVING COUNT(things) > 1)
    """ for shard in [0..(shards-1)]
).join ','