作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一张表中有340 GB的数据(价值270天的数据)。现在计划将这些数据移动到分区表。
这意味着我将有270个分区。将此数据移到分区表的最佳方法是什么。
我不想运行270个查询,这是非常昂贵的操作。因此,正在寻找优化的解决方案。
我有多个这样的表。我需要将所有这些表迁移到分区表。
谢谢,
最佳答案
我看到三个选择
直接从原始表中提取:
操作(要运行的查询数)= [提取的天数] = 270
完全扫描(在原始表的完全扫描中测得的扫描数据量)=天= 270
成本,$ = $ 5 x表格大小,TB x完整扫描= $ 5 x 0.34 x 270 = $ 459.00
分层(递归)提取:(在Mosha的答案中进行了描述)
动作= 2 ^ log2(天)– 2 = 510
完整扫描= 2 * log2(天)= 18
成本$ = $ 5 x表大小,TB x完整扫描= $ 5 x 0.34 x 18 = $ 30.60
聚类提取:(我将在几秒钟内进行描述)
动作=天+1 = 271
完整扫描= [总是] 2 = 2
成本$ = $ 5 x表大小,TB x完整扫描= $ 5 x 0.34 x 2 = $ 3.40
摘要
Method Actions Total Full Scans Total Cost
Direct Extraction 270 270 $459.00
Hierarchical(recursive) Extraction 510 18 $30.60
Clustered Extraction 271 2 $3.40
SELECT 1 AS id, "101" AS x, 1 AS ts UNION ALL
SELECT 2 AS id, "102" AS x, 1 AS ts UNION ALL
SELECT 3 AS id, "103" AS x, 1 AS ts UNION ALL
SELECT 4 AS id, "104" AS x, 1 AS ts UNION ALL
SELECT 5 AS id, "105" AS x, 1 AS ts UNION ALL
SELECT 6 AS id, "106" AS x, 2 AS ts UNION ALL
SELECT 7 AS id, "107" AS x, 2 AS ts UNION ALL
SELECT 8 AS id, "108" AS x, 2 AS ts UNION ALL
SELECT 9 AS id, "109" AS x, 2 AS ts UNION ALL
SELECT 10 AS id, "110" AS x, 3 AS ts UNION ALL
SELECT 11 AS id, "111" AS x, 3 AS ts UNION ALL
SELECT 12 AS id, "112" AS x, 3 AS ts UNION ALL
SELECT 13 AS id, "113" AS x, 3 AS ts UNION ALL
SELECT 14 AS id, "114" AS x, 3 AS ts UNION ALL
SELECT 15 AS id, "115" AS x, 3 AS ts UNION ALL
SELECT 16 AS id, "116" AS x, 3 AS ts UNION ALL
SELECT 17 AS id, "117" AS x, 3 AS ts UNION ALL
SELECT 18 AS id, "118" AS x, 3 AS ts UNION ALL
SELECT 19 AS id, "119" AS x, 4 AS ts UNION ALL
SELECT 20 AS id, "120" AS x, 4 AS ts
SELECT
num,
MAX(IF(ts=1, ser, NULL)) AS ts_1,
MAX(IF(ts=2, ser, NULL)) AS ts_2,
MAX(IF(ts=3, ser, NULL)) AS ts_3,
MAX(IF(ts=4, ser, NULL)) AS ts_4
FROM (
SELECT
ts,
CONCAT(CAST(id AS STRING), "|", x, "|", CAST(ts AS STRING)) AS ser,
ROW_NUMBER() OVER(PARTITION BY ts ORDER BY id) num
FROM theTable
)
GROUP BY num
num ts_1 ts_2 ts_3 ts_4
1 1|101|1 6|106|2 10|110|3 19|119|4
2 2|102|1 7|107|2 11|111|3 20|120|4
3 3|103|1 8|108|2 12|112|3 null
4 4|104|1 9|109|2 13|113|3 null
5 5|105|1 null 14|114|3 null
6 null null 15|115|3 null
7 null null 16|116|3 null
8 null null 17|117|3 null
9 null null 18|118|3 null
SELECT
r[OFFSET(0)] AS id,
r[OFFSET(1)] AS x,
r[OFFSET(2)] AS ts
FROM (
SELECT SPLIT(ts_2, "|") AS r
FROM tempTable
WHERE NOT ts_2 IS NULL
)
id x ts
6 106 2
7 107 2
8 108 2
9 109 2
关于google-bigquery - BigQuery全表分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517060/
我在尝试获取我想要的结果集时遇到了一些问题。基本上我有这两个表: phonemanager_defaults | id | tag | number | |--
我是一名优秀的程序员,十分优秀!