@clickzetta/cz-cli-linux-x64 0.3.2 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cz-cli +0 -0
- package/package.json +1 -1
- package/bin/skills/clickzetta-access-control/SKILL.md +0 -243
- package/bin/skills/clickzetta-access-control/references/dynamic-masking.md +0 -86
- package/bin/skills/clickzetta-access-control/references/grant-revoke.md +0 -103
- package/bin/skills/clickzetta-access-control/references/role-management.md +0 -66
- package/bin/skills/clickzetta-access-control/references/user-management.md +0 -61
- package/bin/skills/clickzetta-ai-vector-search/SKILL.md +0 -160
- package/bin/skills/clickzetta-ai-vector-search/references/vector-search.md +0 -155
- package/bin/skills/clickzetta-app-python-sdk/SKILL.md +0 -153
- package/bin/skills/clickzetta-app-python-sdk/references/bulkload.md +0 -196
- package/bin/skills/clickzetta-app-python-sdk/references/connector.md +0 -143
- package/bin/skills/clickzetta-app-python-sdk/references/realtime.md +0 -122
- package/bin/skills/clickzetta-batch-sync-pipeline/SKILL.md +0 -293
- package/bin/skills/clickzetta-bi-connect/SKILL.md +0 -176
- package/bin/skills/clickzetta-bi-connect/references/bi-tools.md +0 -170
- package/bin/skills/clickzetta-cdc-sync-pipeline/SKILL.md +0 -450
- package/bin/skills/clickzetta-concepts/SKILL.md +0 -282
- package/bin/skills/clickzetta-concepts/references/brands-and-endpoints.md +0 -79
- package/bin/skills/clickzetta-concepts/references/object-model.md +0 -311
- package/bin/skills/clickzetta-data-ingest-pipeline/SKILL.md +0 -165
- package/bin/skills/clickzetta-data-lifecycle/SKILL.md +0 -211
- package/bin/skills/clickzetta-data-lifecycle/references/lifecycle-reference.md +0 -175
- package/bin/skills/clickzetta-data-recovery/SKILL.md +0 -215
- package/bin/skills/clickzetta-data-recovery/evals/evals.json +0 -35
- package/bin/skills/clickzetta-data-science/SKILL.md +0 -125
- package/bin/skills/clickzetta-data-science/references/bitmap-profile.md +0 -146
- package/bin/skills/clickzetta-data-science/references/data-patterns.md +0 -110
- package/bin/skills/clickzetta-data-science/references/setup.md +0 -160
- package/bin/skills/clickzetta-data-science/references/stats-functions.md +0 -195
- package/bin/skills/clickzetta-data-science/references/write-and-infer.md +0 -122
- package/bin/skills/clickzetta-data-science/references/zettapark-api.md +0 -156
- package/bin/skills/clickzetta-data-sharing/SKILL.md +0 -160
- package/bin/skills/clickzetta-data-sharing/references/share-ddl.md +0 -134
- package/bin/skills/clickzetta-dba-guide/SKILL.md +0 -540
- package/bin/skills/clickzetta-dw-modeling/SKILL.md +0 -259
- package/bin/skills/clickzetta-dw-modeling/references/modeling-patterns.md +0 -100
- package/bin/skills/clickzetta-dynamic-table/SKILL.md +0 -86
- package/bin/skills/clickzetta-dynamic-table/best-practices/dimension-table-join-guide.md +0 -257
- package/bin/skills/clickzetta-dynamic-table/best-practices/medallion-and-stream-patterns.md +0 -124
- package/bin/skills/clickzetta-dynamic-table/best-practices/non-partitioned-merge-into-warning.md +0 -96
- package/bin/skills/clickzetta-dynamic-table/best-practices/performance-optimization.md +0 -109
- package/bin/skills/clickzetta-dynamic-table/dt-creator/SKILL.md +0 -15
- package/bin/skills/clickzetta-dynamic-table/dt-creator/references/dt-declaration-strategy.md +0 -185
- package/bin/skills/clickzetta-dynamic-table/dt-creator/references/incremental-config-reference.md +0 -429
- package/bin/skills/clickzetta-dynamic-table/dt-creator/references/refresh-history-guide.md +0 -268
- package/bin/skills/clickzetta-dynamic-table/dt-creator/references/sql-limitations.md +0 -80
- package/bin/skills/clickzetta-dynamic-table/dynamic-table-alter/SKILL.md +0 -190
- package/bin/skills/clickzetta-external-catalog/SKILL.md +0 -120
- package/bin/skills/clickzetta-external-catalog/references/external-catalog-ddl.md +0 -130
- package/bin/skills/clickzetta-external-function/SKILL.md +0 -203
- package/bin/skills/clickzetta-external-function/references/external-function-ddl.md +0 -171
- package/bin/skills/clickzetta-file-import-pipeline/SKILL.md +0 -117
- package/bin/skills/clickzetta-index-manager/SKILL.md +0 -140
- package/bin/skills/clickzetta-index-manager/references/bloomfilter-index.md +0 -67
- package/bin/skills/clickzetta-index-manager/references/index-management.md +0 -73
- package/bin/skills/clickzetta-index-manager/references/inverted-index.md +0 -80
- package/bin/skills/clickzetta-index-manager/references/vector-index.md +0 -81
- package/bin/skills/clickzetta-information-schema/SKILL.md +0 -367
- package/bin/skills/clickzetta-information-schema/references/instance-views-reference.md +0 -276
- package/bin/skills/clickzetta-information-schema/references/metering-views-reference.md +0 -137
- package/bin/skills/clickzetta-information-schema/references/views-reference.md +0 -271
- package/bin/skills/clickzetta-java-sdk/SKILL.md +0 -186
- package/bin/skills/clickzetta-java-sdk/references/bulkload.md +0 -163
- package/bin/skills/clickzetta-java-sdk/references/realtime.md +0 -212
- package/bin/skills/clickzetta-kafka-ingest-pipeline/SKILL.md +0 -531
- package/bin/skills/clickzetta-kafka-ingest-pipeline/references/kafka-pipe-syntax.md +0 -186
- package/bin/skills/clickzetta-lakehouse-connect/SKILL.md +0 -218
- package/bin/skills/clickzetta-lakehouse-connect/evals/evals.json +0 -35
- package/bin/skills/clickzetta-lakehouse-connect/references/config-file.md +0 -435
- package/bin/skills/clickzetta-lakehouse-connect/references/jdbc.md +0 -478
- package/bin/skills/clickzetta-lakehouse-connect/references/python-sdk.md +0 -225
- package/bin/skills/clickzetta-lakehouse-connect/references/sqlalchemy.md +0 -468
- package/bin/skills/clickzetta-lakehouse-connect/references/zettapark-session.md +0 -445
- package/bin/skills/clickzetta-manage-comments/SKILL.md +0 -219
- package/bin/skills/clickzetta-metadata-query/SKILL.md +0 -298
- package/bin/skills/clickzetta-metadata-query/references/show-desc-reference.md +0 -326
- package/bin/skills/clickzetta-monitoring/SKILL.md +0 -199
- package/bin/skills/clickzetta-monitoring/references/job-history-analysis.md +0 -97
- package/bin/skills/clickzetta-monitoring/references/show-jobs.md +0 -48
- package/bin/skills/clickzetta-oss-ingest-pipeline/SKILL.md +0 -402
- package/bin/skills/clickzetta-query-optimizer/SKILL.md +0 -156
- package/bin/skills/clickzetta-query-optimizer/references/explain.md +0 -56
- package/bin/skills/clickzetta-query-optimizer/references/hints-and-sortkey.md +0 -78
- package/bin/skills/clickzetta-query-optimizer/references/optimize.md +0 -65
- package/bin/skills/clickzetta-query-optimizer/references/result-cache.md +0 -49
- package/bin/skills/clickzetta-query-optimizer/references/show-jobs.md +0 -42
- package/bin/skills/clickzetta-realtime-sync-pipeline/SKILL.md +0 -197
- package/bin/skills/clickzetta-semantic-view/SKILL.md +0 -207
- package/bin/skills/clickzetta-semantic-view/references/semantic-view-reference.md +0 -167
- package/bin/skills/clickzetta-spark-flink-connector/SKILL.md +0 -92
- package/bin/skills/clickzetta-spark-flink-connector/references/flink.md +0 -147
- package/bin/skills/clickzetta-spark-flink-connector/references/spark.md +0 -132
- package/bin/skills/clickzetta-sql-pipeline-manager/SKILL.md +0 -353
- package/bin/skills/clickzetta-sql-pipeline-manager/evals/evals.json +0 -166
- package/bin/skills/clickzetta-sql-pipeline-manager/references/dynamic-table.md +0 -173
- package/bin/skills/clickzetta-sql-pipeline-manager/references/materialized-view.md +0 -129
- package/bin/skills/clickzetta-sql-pipeline-manager/references/pipe.md +0 -160
- package/bin/skills/clickzetta-sql-pipeline-manager/references/table-stream.md +0 -123
- package/bin/skills/clickzetta-sql-syntax-guide/SKILL.md +0 -172
- package/bin/skills/clickzetta-sql-syntax-guide/references/ddl-reference.md +0 -350
- package/bin/skills/clickzetta-sql-syntax-guide/references/dml-reference.md +0 -279
- package/bin/skills/clickzetta-sql-syntax-guide/references/dql-reference.md +0 -504
- package/bin/skills/clickzetta-sql-syntax-guide/references/functions-reference.md +0 -372
- package/bin/skills/clickzetta-sql-syntax-guide/references/migration-databricks.md +0 -260
- package/bin/skills/clickzetta-sql-syntax-guide/references/migration-snowflake.md +0 -382
- package/bin/skills/clickzetta-sql-syntax-guide/references/vs-snowflake.md +0 -346
- package/bin/skills/clickzetta-sql-syntax-guide/references/vs-spark.md +0 -229
- package/bin/skills/clickzetta-studio-overview/SKILL.md +0 -170
- package/bin/skills/clickzetta-studio-overview/references/studio-modules.md +0 -173
- package/bin/skills/clickzetta-table-stream-pipeline/SKILL.md +0 -155
- package/bin/skills/clickzetta-vcluster-manager/SKILL.md +0 -212
- package/bin/skills/clickzetta-vcluster-manager/references/vc-cache.md +0 -54
- package/bin/skills/clickzetta-vcluster-manager/references/vcluster-ddl.md +0 -150
- package/bin/skills/clickzetta-volume-manager/SKILL.md +0 -249
- package/bin/skills/clickzetta-volume-manager/references/volume-ddl.md +0 -194
- package/bin/skills/clickzetta-zettapark/SKILL.md +0 -248
- package/bin/skills/clickzetta-zettapark/references/zettapark-api.md +0 -283
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: clickzetta-data-recovery
|
|
3
|
-
description: |
|
|
4
|
-
ClickZetta Lakehouse 数据恢复与历史查询助手。覆盖 Time Travel 查询、UNDROP 恢复误删表、
|
|
5
|
-
RESTORE TABLE 回滚到历史版本、DESC HISTORY 查看变更记录、SHOW TABLES HISTORY 查看删除记录、
|
|
6
|
-
数据保留周期(data_retention_days)配置等完整数据恢复工作流。
|
|
7
|
-
|
|
8
|
-
当用户说"恢复误删的表"、"表被 DROP 了怎么办"、"回滚数据"、"查看历史版本"、
|
|
9
|
-
"时间旅行查询"、"UNDROP"、"RESTORE TABLE"、"数据保留周期"、"查看表的变更历史"、
|
|
10
|
-
"误操作 DELETE/UPDATE 怎么恢复"、"数据回滚"时触发。
|
|
11
|
-
|
|
12
|
-
包含 ClickZetta 特有的语法(TIMESTAMP AS OF、RESTORE TABLE TO、UNDROP TABLE)
|
|
13
|
-
以及数据保留周期默认值(默认 1 天,最长 90 天)等关键约束。
|
|
14
|
-
Keywords: time travel, UNDROP, RESTORE, version history, data recovery, rollback
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# ClickZetta Lakehouse 数据恢复 Skill
|
|
18
|
-
|
|
19
|
-
## 核心命令速查
|
|
20
|
-
|
|
21
|
-
### 1. 查看表变更历史
|
|
22
|
-
```sql
|
|
23
|
-
-- 查看表的所有历史版本(版本号、时间、操作类型、操作用户)
|
|
24
|
-
DESC HISTORY table_name;
|
|
25
|
-
-- 示例
|
|
26
|
-
DESC HISTORY orders;
|
|
27
|
-
```
|
|
28
|
-
返回字段:`version`、`time`、`total_rows`、`total_bytes`、`user`、`operation`、`job_id`
|
|
29
|
-
|
|
30
|
-
### 2. 查看已删除表的记录
|
|
31
|
-
```sql
|
|
32
|
-
-- 查看当前 schema 下所有表(含已删除)的历史记录
|
|
33
|
-
SHOW TABLES HISTORY;
|
|
34
|
-
|
|
35
|
-
-- 指定 schema
|
|
36
|
-
SHOW TABLES HISTORY IN schema_name;
|
|
37
|
-
|
|
38
|
-
-- 按名称过滤
|
|
39
|
-
SHOW TABLES HISTORY LIKE 'orders%';
|
|
40
|
-
|
|
41
|
-
-- 按条件过滤(与 LIKE 二选一)
|
|
42
|
-
SHOW TABLES HISTORY WHERE delete_time IS NOT NULL;
|
|
43
|
-
```
|
|
44
|
-
返回字段:`schema_name`、`table_name`、`create_time`、`creator`、`rows`、`bytes`、`comment`、`retention_time`、`delete_time`
|
|
45
|
-
|
|
46
|
-
### 3. Time Travel 查询历史数据
|
|
47
|
-
```sql
|
|
48
|
-
-- 查询指定时间点的历史数据(只读,不修改表)
|
|
49
|
-
SELECT * FROM table_name TIMESTAMP AS OF 'timestamp_expression';
|
|
50
|
-
|
|
51
|
-
-- 示例:查询昨天下午 3 点的数据
|
|
52
|
-
SELECT * FROM orders TIMESTAMP AS OF '2026-03-18 15:00:00';
|
|
53
|
-
|
|
54
|
-
-- 使用 CAST
|
|
55
|
-
SELECT * FROM orders TIMESTAMP AS OF CAST('2026-03-18 15:00:00' AS TIMESTAMP);
|
|
56
|
-
|
|
57
|
-
-- 使用相对时间(12小时前)
|
|
58
|
-
SELECT * FROM orders TIMESTAMP AS OF CURRENT_TIMESTAMP() - INTERVAL 12 HOURS;
|
|
59
|
-
|
|
60
|
-
-- 带条件过滤
|
|
61
|
-
SELECT * FROM sales.transactions
|
|
62
|
-
TIMESTAMP AS OF '2025-03-15 09:00:00'
|
|
63
|
-
WHERE amount > 10000;
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### 4. RESTORE TABLE 回滚到历史版本
|
|
67
|
-
```sql
|
|
68
|
-
-- 将表回滚到指定时间点(原地修改,会覆盖当前数据)
|
|
69
|
-
RESTORE TABLE table_name TO TIMESTAMP AS OF 'timestamp_expression';
|
|
70
|
-
|
|
71
|
-
-- 标准流程:先查历史,再恢复
|
|
72
|
-
DESC HISTORY orders;
|
|
73
|
-
RESTORE TABLE orders TO TIMESTAMP AS OF '2026-03-18 14:59:00';
|
|
74
|
-
|
|
75
|
-
-- 验证恢复结果
|
|
76
|
-
SELECT COUNT(*) FROM orders;
|
|
77
|
-
```
|
|
78
|
-
> 注意:RESTORE TABLE 支持普通表和动态表,**不支持物化视图**。若表已被 DROP,需先用 UNDROP。
|
|
79
|
-
|
|
80
|
-
### 5. UNDROP TABLE 恢复被删除的表
|
|
81
|
-
```sql
|
|
82
|
-
-- 恢复被 DROP 的表(需在数据保留周期内)
|
|
83
|
-
UNDROP TABLE table_name;
|
|
84
|
-
|
|
85
|
-
-- 带 schema 前缀
|
|
86
|
-
UNDROP TABLE schema_name.table_name;
|
|
87
|
-
|
|
88
|
-
-- 示例
|
|
89
|
-
UNDROP TABLE production.orders;
|
|
90
|
-
|
|
91
|
-
-- 验证恢复
|
|
92
|
-
SHOW TABLES IN production LIKE 'orders';
|
|
93
|
-
SELECT COUNT(*) FROM production.orders;
|
|
94
|
-
```
|
|
95
|
-
> 支持:普通表(TABLE)、动态表(DYNAMIC TABLE)、物化视图(MATERIALIZED VIEW)
|
|
96
|
-
> 限制:若已存在同名表,需先 DROP 新表再 UNDROP
|
|
97
|
-
|
|
98
|
-
### 6. 配置数据保留周期(Time Travel)
|
|
99
|
-
```sql
|
|
100
|
-
-- 查看当前保留周期
|
|
101
|
-
DESC EXTENDED table_name;
|
|
102
|
-
|
|
103
|
-
-- 修改保留周期(单位:天,范围 0-90)
|
|
104
|
-
ALTER TABLE table_name SET PROPERTIES ('data_retention_days'='7');
|
|
105
|
-
|
|
106
|
-
-- 创建表时指定保留周期
|
|
107
|
-
CREATE TABLE orders (id INT, amount DECIMAL(10,2))
|
|
108
|
-
PROPERTIES ('data_retention_days'='30');
|
|
109
|
-
```
|
|
110
|
-
> 默认保留周期:**1 天(24小时)**,最长 **90 天**
|
|
111
|
-
|
|
112
|
-
> ⚠️ **`data_retention_days` vs `data_lifecycle` 区别:**
|
|
113
|
-
> - `data_retention_days`:控制 **Time Travel 保留期**,即可以回溯查询/恢复的历史时长。增大此值会增加存储成本,但不会自动删除数据。
|
|
114
|
-
> - `data_lifecycle`:控制**数据 TTL(生命周期)**,到期后自动删除数据(可选同时删除表结构)。适用于日志、临时数据等有明确过期需求的场景。
|
|
115
|
-
> - 两者相互独立,可同时设置。
|
|
116
|
-
|
|
117
|
-
### 7. 数据生命周期(TTL)管理
|
|
118
|
-
```sql
|
|
119
|
-
-- 创建表时设置生命周期(7天后自动回收数据)
|
|
120
|
-
CREATE TABLE tname (col1 INT, col2 STRING)
|
|
121
|
-
PROPERTIES ('data_lifecycle'='7');
|
|
122
|
-
|
|
123
|
-
-- 创建表时设置生命周期并在到期时删除表结构
|
|
124
|
-
CREATE TABLE tname (col1 INT, col2 STRING)
|
|
125
|
-
PROPERTIES ('data_lifecycle'='7', 'data_lifecycle_delete_meta'='true');
|
|
126
|
-
|
|
127
|
-
-- 修改已有表的生命周期
|
|
128
|
-
ALTER TABLE tname SET PROPERTIES ('data_lifecycle'='30');
|
|
129
|
-
|
|
130
|
-
-- 关闭生命周期(永久保留)
|
|
131
|
-
ALTER TABLE tname SET PROPERTIES ('data_lifecycle'='-1');
|
|
132
|
-
|
|
133
|
-
-- 设置分区级别的生命周期(到期后自动回收该分区数据)
|
|
134
|
-
ALTER TABLE tname PARTITION (dt='2024-01-01') SET PROPERTIES ('data_lifecycle'='30');
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
> **分区级别支持**:`data_lifecycle` 和 `data_retention_days` 均支持在分区级别设置,可以对不同分区配置不同的保留策略。例如热数据分区保留 90 天 Time Travel,冷数据分区保留 1 天。
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## 典型恢复场景
|
|
142
|
-
|
|
143
|
-
### 场景 A:表被误 DROP,立即恢复
|
|
144
|
-
```sql
|
|
145
|
-
-- Step 1: 确认表已被删除及删除时间
|
|
146
|
-
SHOW TABLES HISTORY LIKE 'orders';
|
|
147
|
-
|
|
148
|
-
-- Step 2: 直接 UNDROP(最快方式)
|
|
149
|
-
UNDROP TABLE orders;
|
|
150
|
-
|
|
151
|
-
-- Step 3: 验证
|
|
152
|
-
SELECT COUNT(*) FROM orders;
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### 场景 B:误执行 DELETE/UPDATE,回滚数据
|
|
156
|
-
```sql
|
|
157
|
-
-- Step 1: 查看变更历史,找到误操作前的版本时间
|
|
158
|
-
DESC HISTORY analytics.events;
|
|
159
|
-
|
|
160
|
-
-- Step 2: 先用 Time Travel 验证历史数据
|
|
161
|
-
SELECT COUNT(*) FROM analytics.events
|
|
162
|
-
TIMESTAMP AS OF '2026-03-18 14:55:00'
|
|
163
|
-
WHERE date < '2025-01-01';
|
|
164
|
-
|
|
165
|
-
-- Step 3a: 原地回滚(会覆盖当前所有数据)
|
|
166
|
-
RESTORE TABLE analytics.events TO TIMESTAMP AS OF '2026-03-18 14:55:00';
|
|
167
|
-
|
|
168
|
-
-- Step 3b: 仅补回被删除的数据(不影响其他数据)
|
|
169
|
-
INSERT INTO analytics.events
|
|
170
|
-
SELECT * FROM analytics.events TIMESTAMP AS OF '2026-03-18 14:55:00'
|
|
171
|
-
WHERE date < '2025-01-01';
|
|
172
|
-
|
|
173
|
-
-- Step 4: 验证
|
|
174
|
-
SELECT COUNT(*) FROM analytics.events WHERE date < '2025-01-01';
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### 场景 C:Time Travel 查询历史数据(只读)
|
|
178
|
-
```sql
|
|
179
|
-
-- 查询指定时间点的数据,不修改表
|
|
180
|
-
SELECT *
|
|
181
|
-
FROM sales.transactions
|
|
182
|
-
TIMESTAMP AS OF '2025-03-15 09:00:00'
|
|
183
|
-
WHERE amount > 10000
|
|
184
|
-
ORDER BY amount DESC;
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## 关键约束与注意事项
|
|
190
|
-
|
|
191
|
-
| 项目 | 说明 |
|
|
192
|
-
|------|------|
|
|
193
|
-
| 默认保留周期 | 1 天(24小时) |
|
|
194
|
-
| 最长保留周期 | 90 天 |
|
|
195
|
-
| UNDROP 限制 | 同名表存在时无法 UNDROP,需先 DROP 新表 |
|
|
196
|
-
| RESTORE 限制 | 不支持物化视图;表已删除时需先 UNDROP |
|
|
197
|
-
| Time Travel 语法 | `TIMESTAMP AS OF`(不是 `AT`、`FOR SYSTEM_TIME AS OF`) |
|
|
198
|
-
| 时区 | 时间戳默认使用实例时区,建议明确指定或换算 UTC |
|
|
199
|
-
| 保留周期修改 | 会增加存储成本 |
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## 决策树
|
|
204
|
-
|
|
205
|
-
```
|
|
206
|
-
数据丢失/损坏
|
|
207
|
-
├── 表被 DROP?
|
|
208
|
-
│ ├── 在保留周期内 → UNDROP TABLE
|
|
209
|
-
│ └── 超出保留周期 → 联系管理员 / 从备份恢复
|
|
210
|
-
└── 表存在,数据被 DELETE/UPDATE/TRUNCATE?
|
|
211
|
-
├── 在保留周期内
|
|
212
|
-
│ ├── 需要全量回滚 → RESTORE TABLE TO TIMESTAMP AS OF
|
|
213
|
-
│ └── 需要补回部分数据 → INSERT INTO ... SELECT ... TIMESTAMP AS OF
|
|
214
|
-
└── 超出保留周期 → 联系管理员 / 从备份恢复
|
|
215
|
-
```
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "clickzetta-data-recovery",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "我的表 production.orders 被误删了,怎么恢复?",
|
|
7
|
-
"expected_output": "使用 UNDROP TABLE production.orders; 恢复,先用 SHOW TABLES HISTORY 确认删除记录,恢复后验证数据",
|
|
8
|
-
"files": []
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": 2,
|
|
12
|
-
"prompt": "昨天下午3点我执行了 DELETE FROM analytics.events WHERE date < '2025-01-01',现在想把数据恢复回来",
|
|
13
|
-
"expected_output": "使用 TIMESTAMP AS OF 查询历史数据,通过 RESTORE TABLE 或 INSERT INTO ... SELECT ... TIMESTAMP AS OF 恢复被删除的数据,包含时区换算说明",
|
|
14
|
-
"files": []
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": 3,
|
|
18
|
-
"prompt": "我想查询 sales.transactions 表在 2025-03-15 09:00:00 时金额超过 10000 的交易记录",
|
|
19
|
-
"expected_output": "使用 SELECT * FROM sales.transactions TIMESTAMP AS OF '2025-03-15 09:00:00' WHERE amount > 10000 语法,说明这是只读查询,提示确认保留周期是否覆盖该时间点",
|
|
20
|
-
"files": []
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": 4,
|
|
24
|
-
"prompt": "如何查看一张表的所有历史变更记录?我想知道什么时候有人修改过数据",
|
|
25
|
-
"expected_output": "使用 DESC HISTORY table_name; 命令,说明返回字段含义(version、time、user、operation),可结合 TIMESTAMP AS OF 查询特定版本数据",
|
|
26
|
-
"files": []
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"id": 5,
|
|
30
|
-
"prompt": "我想把表的数据保留周期从默认的1天改成30天,怎么操作?有什么注意事项?",
|
|
31
|
-
"expected_output": "使用 ALTER TABLE table_name SET PROPERTIES ('data_retention_days'='30'); 修改,说明默认1天、最长90天、修改会增加存储成本",
|
|
32
|
-
"files": []
|
|
33
|
-
}
|
|
34
|
-
]
|
|
35
|
-
}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: clickzetta-data-science
|
|
3
|
-
description: |
|
|
4
|
-
数据科学家使用 ClickZetta Lakehouse 的端到端工作流指南。按工作阶段组织:
|
|
5
|
-
开发环境准备(Python 3.10+ 检查/搭建)、Jupyter Notebook 配置与使用、
|
|
6
|
-
项目结构规范(Cookiecutter DS 标准)、数据发现、数据质量评估、
|
|
7
|
-
数据清洗与整合、数据集构建、EDA 探索分析、
|
|
8
|
-
特征工程(SQL + ZettaPark)、模型推理上线(BITMAP 用户画像/UDF 批量推理/向量检索)。
|
|
9
|
-
当用户说"数据科学"、"机器学习"、"特征工程"、"EDA"、"数据探索"、
|
|
10
|
-
"ZettaPark 机器学习"、"Jupyter 连接 Lakehouse"、"notebook"、"ipynb"、
|
|
11
|
-
"jupyter kernel"、"%%sql"、"magic command"、"pandas 读取数据"、
|
|
12
|
-
"数据质量检查"、"数据采样"、"TABLESAMPLE"、"approx_percentile"、
|
|
13
|
-
"BITMAP 用户画像"、"人群圈选"、"批量推理"、"Python 3.10"、
|
|
14
|
-
"scikit-learn"、"项目目录结构"、"config.json"、".env"时触发。
|
|
15
|
-
Keywords: data science, Jupyter, EDA, feature engineering, ML, pandas, notebook
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# ClickZetta Lakehouse 数据科学工作流
|
|
19
|
-
|
|
20
|
-
## 工作流全景
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
环境准备 → Jupyter 配置 → 项目结构 → 数据发现 → 数据质量评估 → 数据清洗整合
|
|
24
|
-
↓
|
|
25
|
-
模型推理上线 ← 特征工程 ← EDA ← 数据集构建
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 硬性前提条件
|
|
31
|
-
|
|
32
|
-
**Python 3.10+**(ZettaPark 硬性要求)。用户环境是 3.9 或更低时,先给升级方案再继续:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
brew install pyenv && pyenv install 3.12.9 && pyenv local 3.12.9
|
|
36
|
-
python -m venv .venv && source .venv/bin/activate
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
详细搭建步骤见 [references/setup.md](references/setup.md)。
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## 项目结构
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
my-ds-project/
|
|
47
|
-
├── notebooks/ # 00-env-check.ipynb 必须是第一个
|
|
48
|
-
│ ├── 00-env-check.ipynb
|
|
49
|
-
│ ├── 01-data-discovery.ipynb
|
|
50
|
-
│ ├── 02-data-quality.ipynb
|
|
51
|
-
│ ├── 03-eda.ipynb
|
|
52
|
-
│ ├── 04-feature-engineering.ipynb
|
|
53
|
-
│ └── 05-modeling.ipynb
|
|
54
|
-
├── src/
|
|
55
|
-
│ ├── config.py # 连接配置,见 references/setup.md
|
|
56
|
-
│ ├── data/
|
|
57
|
-
│ └── features/
|
|
58
|
-
├── sql/
|
|
59
|
-
├── data/ # 全部加入 .gitignore
|
|
60
|
-
├── models/ # 全部加入 .gitignore
|
|
61
|
-
├── .env # 绝不入 git
|
|
62
|
-
└── .env.example # 入 git
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
环境变量命名规范:`CLICKZETTA_SERVICE` / `CLICKZETTA_INSTANCE` / `CLICKZETTA_WORKSPACE` / `CLICKZETTA_USERNAME` / `CLICKZETTA_PASSWORD` / `CLICKZETTA_VCLUSTER` / `CLICKZETTA_SCHEMA`。
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## 数据写入规则(禁止事项)
|
|
70
|
-
|
|
71
|
-
| 方式 | 结论 |
|
|
72
|
-
|------|------|
|
|
73
|
-
| `session.create_dataframe(df).write.save_as_table()` | ✅ 推荐 |
|
|
74
|
-
| `cursor` 批量 INSERT(每批 500 行) | ✅ Python 3.9 / ZettaPark 不可用时的 fallback |
|
|
75
|
-
| `df.to_sql(conn, ...)` | ❌ 禁止,报 `'list' object has no attribute 'keys'` |
|
|
76
|
-
| SQLAlchemy `clickzetta://...` | ❌ 禁止,dialect 不可靠 |
|
|
77
|
-
|
|
78
|
-
代码模板见 [references/write-and-infer.md](references/write-and-infer.md)。
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## 数据查看规则
|
|
83
|
-
|
|
84
|
-
- 快速查看用 `.show()`,不需要 pandas 时不要 `.to_pandas()`
|
|
85
|
-
- 大表操作默认加 `TABLESAMPLE ROW(10)` 采样,避免 OOM
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## 数据验证规则
|
|
90
|
-
|
|
91
|
-
导入数据后,**立即用已知基准值验证统计结果**,再进行后续分析。
|
|
92
|
-
|
|
93
|
-
常见陷阱:运动员/用户级别的原始数据,团体项目每个参与者各有一条记录,直接 SUM 会重复计算。正确做法:先 `SELECT DISTINCT event, medal, ...` 去重,再聚合。
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## ClickZetta SQL 不支持的语法
|
|
98
|
-
|
|
99
|
-
| 不支持 | 替代方案 |
|
|
100
|
-
|--------|---------|
|
|
101
|
-
| `CREATE OR REPLACE TABLE` | `CREATE TABLE IF NOT EXISTS`(普通表不支持 OR REPLACE) |
|
|
102
|
-
| `ARRAY_AGG(col IGNORE NULLS)` | `MAX(col)` 或 `COALESCE()` |
|
|
103
|
-
| `QUALIFY` 子句 | 子查询 + `WHERE rn = 1` |
|
|
104
|
-
| `UNION` / `INTERSECT` / `EXCEPT` | JOIN + 应用层合并 |
|
|
105
|
-
| `BEGIN; COMMIT; ROLLBACK;` | 用 MERGE 实现原子操作 |
|
|
106
|
-
| `NOW()` | `CURRENT_TIMESTAMP()` |
|
|
107
|
-
|
|
108
|
-
遇到其他语法报错,加载 `clickzetta-sql-syntax-guide` skill。
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## Schema 上下文
|
|
113
|
-
|
|
114
|
-
Python 代码中 SQL 语句始终使用完整表名 `schema.table`,不依赖当前 schema 上下文。
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## 参考文档
|
|
119
|
-
|
|
120
|
-
- [环境搭建与项目配置](references/setup.md) — 环境搭建、config.py 模板、Jupyter 配置
|
|
121
|
-
- [数据发现/质量/清洗/EDA 示例](references/data-patterns.md)
|
|
122
|
-
- [数据写入/特征工程/模型推理示例](references/write-and-infer.md)
|
|
123
|
-
- [ZettaPark API](references/zettapark-api.md)
|
|
124
|
-
- [统计分析函数](references/stats-functions.md)
|
|
125
|
-
- [BITMAP 用户画像](references/bitmap-profile.md)
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
# BITMAP 用户画像参考
|
|
2
|
-
|
|
3
|
-
> 来源:https://www.yunqi.tech/documents/bitmap-type
|
|
4
|
-
|
|
5
|
-
BITMAP 是 ClickZetta 中用于高效存储和处理整数集合的数据类型,基于 Roaring Bitmap 压缩算法,特别适合用户画像、人群圈选、UV 统计等数据科学场景。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 核心限制
|
|
10
|
-
|
|
11
|
-
- 支持 **64 位无符号整数**(0 到 2^64-1)
|
|
12
|
-
- **不支持**比较操作(<、>、=)
|
|
13
|
-
- **不支持** ORDER BY、GROUP BY、DISTINCT
|
|
14
|
-
- **不能**作为 PRIMARY KEY、PARTITION KEY、CLUSTER KEY
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## 构建用户标签 BITMAP
|
|
19
|
-
|
|
20
|
-
```sql
|
|
21
|
-
-- 方式 1:从行数据聚合构建(最常用)
|
|
22
|
-
CREATE TABLE ds_workspace.user_tags AS
|
|
23
|
-
SELECT
|
|
24
|
-
tag_name,
|
|
25
|
-
group_bitmap_state(user_id) AS user_bitmap
|
|
26
|
-
FROM (
|
|
27
|
-
-- 高消费用户
|
|
28
|
-
SELECT 'high_value' AS tag_name, user_id
|
|
29
|
-
FROM my_schema.orders
|
|
30
|
-
WHERE total_amount_30d > 1000
|
|
31
|
-
UNION ALL
|
|
32
|
-
-- 近30天活跃用户
|
|
33
|
-
SELECT 'active_30d' AS tag_name, user_id
|
|
34
|
-
FROM my_schema.events
|
|
35
|
-
WHERE event_date >= CURRENT_DATE - INTERVAL 30 DAY
|
|
36
|
-
UNION ALL
|
|
37
|
-
-- 已流失用户(90天未活跃)
|
|
38
|
-
SELECT 'churned' AS tag_name, user_id
|
|
39
|
-
FROM my_schema.users
|
|
40
|
-
WHERE last_active_date < CURRENT_DATE - INTERVAL 90 DAY
|
|
41
|
-
) t
|
|
42
|
-
GROUP BY tag_name;
|
|
43
|
-
|
|
44
|
-
-- 方式 2:从数组构建
|
|
45
|
-
INSERT INTO ds_workspace.user_tags VALUES
|
|
46
|
-
('vip', bitmap_build(ARRAY(1001, 1002, 1003, 1004)));
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## 人群圈选操作
|
|
52
|
-
|
|
53
|
-
```sql
|
|
54
|
-
-- 交集:同时满足多个标签(AND)
|
|
55
|
-
SELECT bitmap_count(
|
|
56
|
-
bitmap_and(
|
|
57
|
-
(SELECT user_bitmap FROM ds_workspace.user_tags WHERE tag_name = 'high_value'),
|
|
58
|
-
(SELECT user_bitmap FROM ds_workspace.user_tags WHERE tag_name = 'active_30d')
|
|
59
|
-
)
|
|
60
|
-
) AS target_count;
|
|
61
|
-
|
|
62
|
-
-- 并集:满足任一标签(OR)
|
|
63
|
-
SELECT bitmap_count(
|
|
64
|
-
bitmap_or(
|
|
65
|
-
(SELECT user_bitmap FROM ds_workspace.user_tags WHERE tag_name = 'high_value'),
|
|
66
|
-
(SELECT user_bitmap FROM ds_workspace.user_tags WHERE tag_name = 'active_30d')
|
|
67
|
-
)
|
|
68
|
-
) AS reach_count;
|
|
69
|
-
|
|
70
|
-
-- 差集:排除某类用户(ANDNOT)
|
|
71
|
-
SELECT bitmap_count(
|
|
72
|
-
bitmap_andnot(
|
|
73
|
-
(SELECT user_bitmap FROM ds_workspace.user_tags WHERE tag_name = 'high_value'),
|
|
74
|
-
(SELECT user_bitmap FROM ds_workspace.user_tags WHERE tag_name = 'churned')
|
|
75
|
-
)
|
|
76
|
-
) AS targetable_count;
|
|
77
|
-
|
|
78
|
-
-- 获取目标用户 ID 列表
|
|
79
|
-
SELECT bitmap_to_array(
|
|
80
|
-
bitmap_andnot(
|
|
81
|
-
(SELECT user_bitmap FROM ds_workspace.user_tags WHERE tag_name = 'high_value'),
|
|
82
|
-
(SELECT user_bitmap FROM ds_workspace.user_tags WHERE tag_name = 'churned')
|
|
83
|
-
)
|
|
84
|
-
) AS target_user_ids;
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## UV 统计(去重计数)
|
|
90
|
-
|
|
91
|
-
```sql
|
|
92
|
-
-- 日活跃用户数(DAU)
|
|
93
|
-
SELECT
|
|
94
|
-
event_date,
|
|
95
|
-
bitmap_count(group_bitmap_state(user_id)) AS dau
|
|
96
|
-
FROM my_schema.events
|
|
97
|
-
GROUP BY event_date
|
|
98
|
-
ORDER BY event_date;
|
|
99
|
-
|
|
100
|
-
-- 周活跃用户数(WAU)—— 跨天去重
|
|
101
|
-
SELECT
|
|
102
|
-
DATE_TRUNC('week', event_date) AS week_start,
|
|
103
|
-
bitmap_count(
|
|
104
|
-
bitmap_or_agg(daily_bitmap) -- 合并多天 bitmap
|
|
105
|
-
) AS wau
|
|
106
|
-
FROM (
|
|
107
|
-
SELECT event_date,
|
|
108
|
-
group_bitmap_state(user_id) AS daily_bitmap
|
|
109
|
-
FROM my_schema.events
|
|
110
|
-
GROUP BY event_date
|
|
111
|
-
) t
|
|
112
|
-
GROUP BY 1;
|
|
113
|
-
|
|
114
|
-
-- 用户留存分析(新用户 vs 回访用户)
|
|
115
|
-
SELECT
|
|
116
|
-
bitmap_count(
|
|
117
|
-
bitmap_and(new_users.user_bitmap, return_users.user_bitmap)
|
|
118
|
-
) AS retained_users,
|
|
119
|
-
bitmap_count(
|
|
120
|
-
bitmap_andnot(new_users.user_bitmap, return_users.user_bitmap)
|
|
121
|
-
) AS lost_users
|
|
122
|
-
FROM
|
|
123
|
-
(SELECT group_bitmap_state(user_id) AS user_bitmap
|
|
124
|
-
FROM my_schema.events WHERE event_date = '2024-01-01') AS new_users,
|
|
125
|
-
(SELECT group_bitmap_state(user_id) AS user_bitmap
|
|
126
|
-
FROM my_schema.events WHERE event_date = '2024-01-08') AS return_users;
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
## 常用 BITMAP 函数速查
|
|
132
|
-
|
|
133
|
-
| 函数 | 说明 | 示例 |
|
|
134
|
-
|---|---|---|
|
|
135
|
-
| `group_bitmap_state(col)` | 聚合构建 BITMAP | `GROUP BY tag` |
|
|
136
|
-
| `bitmap_count(bm)` | 计算元素个数(UV) | `bitmap_count(user_bm)` |
|
|
137
|
-
| `bitmap_and(a, b)` | 交集 | 同时满足 A 和 B |
|
|
138
|
-
| `bitmap_or(a, b)` | 并集 | 满足 A 或 B |
|
|
139
|
-
| `bitmap_andnot(a, b)` | 差集 | 在 A 中但不在 B 中 |
|
|
140
|
-
| `bitmap_xor(a, b)` | 异或(只在一个中) | A、B 各自独有的 |
|
|
141
|
-
| `bitmap_to_array(bm)` | 转为整数数组 | 获取用户 ID 列表 |
|
|
142
|
-
| `bitmap_build(arr)` | 从数组构建 | `bitmap_build(ARRAY(1,2,3))` |
|
|
143
|
-
| `bitmap_contains(bm, val)` | 检查是否包含某值 | `bitmap_contains(bm, user_id)` |
|
|
144
|
-
| `bitmap_min(bm)` | 最小元素 | — |
|
|
145
|
-
| `bitmap_max(bm)` | 最大元素 | — |
|
|
146
|
-
| `to_bitmap(val)` | 单值转 BITMAP | `to_bitmap(user_id)` |
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
# 数据发现、质量评估、清洗、EDA 示例
|
|
2
|
-
|
|
3
|
-
## 数据发现
|
|
4
|
-
|
|
5
|
-
```python
|
|
6
|
-
from src.config import get_session
|
|
7
|
-
session = get_session()
|
|
8
|
-
|
|
9
|
-
session.sql("SHOW SCHEMAS").show()
|
|
10
|
-
session.sql("SHOW TABLES IN my_schema").show()
|
|
11
|
-
session.sql("DESC EXTENDED my_schema.orders").show()
|
|
12
|
-
session.sql("""
|
|
13
|
-
SELECT table_name, row_count,
|
|
14
|
-
ROUND(bytes/1024.0/1024/1024, 2) AS size_gb
|
|
15
|
-
FROM information_schema.tables
|
|
16
|
-
WHERE table_schema = 'my_schema'
|
|
17
|
-
ORDER BY bytes DESC
|
|
18
|
-
""").show()
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 数据质量评估
|
|
24
|
-
|
|
25
|
-
```sql
|
|
26
|
-
-- 基础统计
|
|
27
|
-
SELECT
|
|
28
|
-
COUNT(*) AS total_rows,
|
|
29
|
-
COUNT(DISTINCT user_id) AS unique_users,
|
|
30
|
-
MIN(event_time) AS earliest, MAX(event_time) AS latest,
|
|
31
|
-
ROUND(100.0 * SUM(CASE WHEN user_id IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2) AS user_id_null_pct,
|
|
32
|
-
ROUND(100.0 * SUM(CASE WHEN amount IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2) AS amount_null_pct
|
|
33
|
-
FROM my_schema.orders;
|
|
34
|
-
|
|
35
|
-
-- 主键重复检查
|
|
36
|
-
SELECT order_id, COUNT(*) AS cnt
|
|
37
|
-
FROM my_schema.orders GROUP BY order_id HAVING cnt > 1 LIMIT 10;
|
|
38
|
-
|
|
39
|
-
-- 数值分布(大表高效)
|
|
40
|
-
SELECT
|
|
41
|
-
approx_percentile(amount, 0.25) AS p25,
|
|
42
|
-
approx_percentile(amount, 0.50) AS median,
|
|
43
|
-
approx_percentile(amount, 0.75) AS p75,
|
|
44
|
-
approx_percentile(amount, 0.99) AS p99,
|
|
45
|
-
MIN(amount) AS min_val, MAX(amount) AS max_val
|
|
46
|
-
FROM my_schema.orders;
|
|
47
|
-
|
|
48
|
-
-- 高频值 TOP-K
|
|
49
|
-
SELECT approx_top_k(status, 10) AS top_statuses FROM my_schema.orders;
|
|
50
|
-
|
|
51
|
-
-- 近似 UV
|
|
52
|
-
SELECT approx_count_distinct(user_id) AS approx_uv FROM my_schema.events;
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 数据清洗
|
|
58
|
-
|
|
59
|
-
```sql
|
|
60
|
-
-- 去重(保留最新一条)
|
|
61
|
-
SELECT * FROM (
|
|
62
|
-
SELECT *, ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY update_time DESC) AS rn
|
|
63
|
-
FROM my_schema.orders_raw
|
|
64
|
-
) WHERE rn = 1;
|
|
65
|
-
|
|
66
|
-
-- 缺失值处理 + 类型转换
|
|
67
|
-
SELECT
|
|
68
|
-
order_id, user_id,
|
|
69
|
-
COALESCE(amount, 0.0) AS amount,
|
|
70
|
-
COALESCE(status, 'UNKNOWN') AS status,
|
|
71
|
-
CAST(order_date AS DATE) AS order_date
|
|
72
|
-
FROM my_schema.orders_raw
|
|
73
|
-
WHERE user_id IS NOT NULL;
|
|
74
|
-
|
|
75
|
-
-- 多表整合
|
|
76
|
-
SELECT o.order_id, o.user_id, o.amount, o.order_date,
|
|
77
|
-
u.age_group, u.city, p.category, p.brand
|
|
78
|
-
FROM my_schema.orders o
|
|
79
|
-
LEFT JOIN my_schema.users u ON o.user_id = u.user_id
|
|
80
|
-
LEFT JOIN my_schema.products p ON o.product_id = p.product_id;
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## EDA
|
|
86
|
-
|
|
87
|
-
```python
|
|
88
|
-
# 采样策略
|
|
89
|
-
df_quick = session.sql("""
|
|
90
|
-
SELECT * FROM my_schema.events TABLESAMPLE SYSTEM (0.1) LIMIT 50000
|
|
91
|
-
""").to_pandas() # SYSTEM:文件级,极快,适合 >100万行预览
|
|
92
|
-
|
|
93
|
-
df_ml = session.sql("""
|
|
94
|
-
SELECT * FROM my_schema.events TABLESAMPLE ROW (10)
|
|
95
|
-
""").to_pandas() # ROW:行级精确,适合 ML 训练集
|
|
96
|
-
|
|
97
|
-
# 时序分析
|
|
98
|
-
session.sql("""
|
|
99
|
-
SELECT
|
|
100
|
-
DATE_TRUNC('day', order_time) AS dt,
|
|
101
|
-
COUNT(*) AS daily_orders,
|
|
102
|
-
SUM(amount) AS daily_revenue,
|
|
103
|
-
AVG(SUM(amount)) OVER (
|
|
104
|
-
ORDER BY DATE_TRUNC('day', order_time)
|
|
105
|
-
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
|
|
106
|
-
) AS revenue_7d_ma
|
|
107
|
-
FROM my_schema.orders
|
|
108
|
-
GROUP BY 1 ORDER BY 1
|
|
109
|
-
""").to_pandas().plot(x='dt', y=['daily_revenue', 'revenue_7d_ma'])
|
|
110
|
-
```
|