数据与分析
数据目录与 SQL
所有表格类数据:上传的文件、22 种数据库与数据仓库、5 种应用数据源,描述它们的数据目录,以及查询它们的工作台。
打开 数据 → 数据目录.
本地表
- 1
上传
拖入一个.csv或.xlsx,或直接粘贴数据行。第一行会被当作表头。 - 2
核对推断出的列类型
一列2024-03-01必须是 日期类型,而不是文本,否则日期筛选和时序图表后面都用不了。现在就改掉——等仪表板搭好之后再改要麻烦得多。 - 3
取名要考虑模型
monthly_revenue被智能体选对的概率远高于sheet1。小写、下划线、不要空格。
为什么这样设计
外部连接——逐个字段说明
在这里配置: 集成 → 数据源 → 添加连接。每个连接器都有一个 名称 (你自己的标签)和一个 测试连接 按钮;最近一次测试的结果与报错会保存在该连接上,方便你看出它是从什么时候开始失败的。所有密钥都加密存储,绝不回传给浏览器。
注意
PostgreSQL
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
host | 是 | db.example.com |
port | 否 | 默认 5432 |
database | 是 | analytics |
username | 是 | 为此创建一个只读角色 |
password | 是 | — |
ssl | 否 | 设为 require 即启用 TLS。大多数托管服务(RDS、Cloud SQL、Neon、Supabase)都需要。 |
MySQL / MariaDB
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
host | 是 | db.example.com |
port | 否 | 默认 3306 |
database | 是 | analytics |
username | 是 | — |
password | 是 | — |
ssl | 否 | 设为 require 以启用 TLS。 |
另有九种数据库用的就是上面这些字段
- PostgreSQL 字段 ——CockroachDB、TimescaleDB、AlloyDB、Greenplum、YugabyteDB
- MySQL 字段 ——MariaDB、SingleStore、StarRocks、Apache Doris、PlanetScale
Microsoft SQL Server / Azure SQL
通过 tedious 驱动使用 TDS 协议,因此需要 Node 或 Docker 部署 ——没有 REST SQL API 可以退而求其次。
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
host | 是 | sql.example.com 或 acme.database.windows.net |
port | 否 | 默认 1433。使用命名实例时请留空。 |
database | 是 | analytics |
username | 是 | — |
password | 是 | — |
instance_name | 否 | 命名实例,例如 SQLEXPRESS. 与端口互斥 ——两者都填的话实例会被忽略,于是你会静默连到错误的服务器上。 |
trust_server_certificate | 否 | 设置 true 适用于使用自签证书的本地部署服务器。Azure SQL 从不需要它,保持关闭即可。 |
ClickHouse
使用 HTTP 接口,因此任何部署方式都可用。
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
url | 是 | HTTP 接口的基础 URL,例如 https://abc.clickhouse.cloud:8443 |
username | 是 | default |
password | 是 | — |
database | 否 | 限定可浏览的表范围 |
Snowflake
使用 编程访问令牌(PAT),而不是密码——在 Snowflake 的用户设置中生成。
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
account | 是 | 账户标识符: xy12345.eu-west-1 或 myorg-myaccount |
token | 是 | PAT 令牌 |
warehouse | 是 | COMPUTE_WH——执行查询的计算资源 |
database | 是 | ANALYTICS |
schema | 否 | PUBLIC——限定可浏览的表范围 |
role | 否 | 默认使用该用户的默认角色。为遵循最小权限原则,请显式指定。 |
Databricks SQL
该 warehouse_id 取自该 SQL 数仓的 连接详情 页签中。
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
host | 是 | https://dbc-xxxx.cloud.databricks.com |
warehouse_id | 是 | 取自“连接详情” |
token | 是 | 个人访问令牌 |
catalog | 否 | Unity Catalog 的 catalog 名称 |
schema | 否 | 默认 schema |
Google BigQuery
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
project_id | 是 | my-gcp-project |
service_account_json | 是 | 完整的服务账号密钥 JSON,以字符串形式粘贴。需授予 BigQuery Data Viewer 与 Job User 权限。 |
location | 否 | US、EU 或某个区域,例如 us-central1。用于作业执行和跨区域列表。 |
dataset | 否 | 把浏览范围限定在单个 dataset |
Amazon Redshift
两种形态: Serverless (设置 workgroup_name)或 预置型 (设置 cluster_identifier 和 db_user)。只填其中一组,不要都填。
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
region | 是 | us-east-1 |
access_key_id | 是 | — |
secret_access_key | 是 | — |
database | 是 | dev |
workgroup_name | Serverless | Serverless 工作组名称 |
cluster_identifier | 预置型 | 集群 id |
db_user | 预置型 | 该集群的数据库用户 |
Azure Synapse(专用 SQL 池)
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
server | 是 | myworkspace.sql.azuresynapse.net |
database | 是 | 池名称 |
username | 是 | — |
password | 是 | — |
Trino / Starburst / Presto
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
host | 是 | trino.example.com——只填主机名,不带协议 |
port | 否 | 启用 TLS 时默认 443,明文时默认 8080 |
username | 是 | 协议要求必填(作为 X-Trino-User 发送) |
password | 否 | Basic 认证;匿名协调节点下可不填 |
access_token | 否 | JWT / OAuth2 bearer 令牌——填写后优先于密码 |
catalog | 否 | iceberg、hive、delta…… |
schema | 否 | 默认 schema |
ssl | 否 | 设为 disable 表示使用明文 HTTP;其他任何值都走 HTTPS(默认)。 |
Amazon Athena
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
region | 是 | us-east-1 |
access_key_id | 是 | — |
secret_access_key | 是 | — |
session_token | 否 | 用于临时 STS 凭据 |
database | 否 | 默认查询的 Glue 数据库,同时限定浏览范围 |
catalog | 否 | 默认为 AwsDataCatalog |
workgroup | 否 | 默认为 primary |
output_location | 通常原因 | s3://bucket/prefix/ 用于存放查询结果。除非工作组已配置,否则必填——这是 Athena 连接失败最常见的原因。 |
Oracle Database / Autonomous DB
通过 ORDS 连接——纯 HTTPS,因此不需要 wallet,也不需要 Instant Client。Autonomous Database 默认已启用 ORDS。
| 字段 | 必填 | 示例 / 说明 |
|---|---|---|
ords_url | 是 | 取自 Database Actions 的基础 URL,例如 https://<id>-<db>.adb.<region>.oraclecloudapps.com/ords |
username | 是 | 数据库用户,对已启用 REST 的 schema 走 HTTP Basic 认证 |
password | 是 | — |
schema | 否 | URL 中的 schema 别名段,取自 ORDS.ENABLE_SCHEMA。默认为小写的用户名,这也是 ORDS 自身的默认值。 |
对象存储与湖仓目录
S3、GCS 及兼容端点是作为 数据目录数据源 添加的,而不是查询连接——它们会被抓取,文件被登记为数据集。Iceberg REST 与 Unity Catalog 接入的是元数据。两者都在这里配置: 数据目录 → 添加数据源.
创建只读用户
SELECT,所以只读角色不会让你损失任何能力,却能把密钥泄漏的影响面限制住。直接查询与导入的取舍
| 模式 | 数据新鲜度 | 成本 | 适用于 |
|---|---|---|---|
| 直接查询 | 始终最新 | 每次查询都往数据源跑一趟 | 运营核查;分钟级变化的数据 |
| 导入(快照) | 为上次刷新时的状态 | 重复查询又快又省 | 很多人会打开的仪表板;任何被反复作图的数据 |
把连接共享给团队
连接归创建者所有。与其让每个分析师各建一个(同一份凭据存了好几份,各自轮换,每一份都是一个泄漏点),超级管理员可以在这里共享它: 管理 → IAM → 访问控制,共享给某个用户或用户组,形式可以是 数据库 / 数据仓库连接 或 应用数据源.
共享连接以其所有者的身份运行。 凭据 就是 这个连接本身——被授权者并没有自己的凭据——所以所有者的凭据在服务端解密,查询打到所有者的数仓上。被授权者可以查询、测试、查看健康状况;但看不到凭据,也不能修改或删除它。 {{secret:NAME}} 引用是按所有者身份解析的,绝不会用被授权者自己的密钥库。
撤销在下次使用时立即生效
共享的 应用数据源 以所有者身份同步,写入所有者的数据集——这样发现数据过期的同事可以直接重跑并刷新真实数据集,而不是在自己账号下再建一份平行副本。审计记录会同时记下是谁触发的、动的是谁的数据。共享数据源让人能维护它;若还要让对方读取同步出来的数据,那些数据集也要一并共享。
应用——SaaS 数据源
数据库是 就地查询的。应用没有查询语言,所以它们是被 拉取成数据集 : 集成 → 应用 → 连接、发现里面有什么、选择要同步的内容。每条数据流各成一个数据集,之后与上传的 CSV 无从区分——同样的类型推断、同样的版本历史,在 BI、数据准备流程和语义层里同样可用。
| 应用 | 认证方式 | 数据流 |
|---|---|---|
| Google Sheets | 服务账号 JSON | 每个工作表对应一个数据集。必须把该表格共享给密钥里的 client_email,否则无论密钥多有效,Google 都会返回 403。 |
| Stripe | 秘密密钥或受限密钥 | 收款、客户、发票、订阅、支付意向、商品、价格、退款、打款、余额流水 |
| Shopify | Admin API 访问令牌 | 订单、客户、商品、草稿订单、价格规则 |
| HubSpot | 私有应用令牌 | 联系人、公司、商机、工单、订单行、商品 |
| Salesforce | 已连接应用(客户端凭据) | 客户、联系人、线索、商机、服务案例、市场活动、用户 |
认证一律是粘贴凭据,而不是 OAuth:重定向流程需要一个公网可达的回调 URL,而防火墙后的自托管部署可能没有,所以每个连接器都改用厂商的服务端到服务端凭据。
同步会整体替换其数据集
保持连接可用
每个连接底下都有三件事在自动运行,无需你操心。运维实例的人都可以调整——参见 自托管.
| 会发生什么 | 你看到的现象 | |
|---|---|---|
| 健康检查 | 每个连接都会被定时重测,用的探测方式与 测试 按钮完全一致。数仓密码因公司轮换策略到期,是由我们发现,而不是等仪表板在客户面前报错。 | A 异常 在“集成”页显示徽标;出问题时通知一次,恢复时再通知一次——不是每次检查都通知。 |
| 凭据年龄 | 已存密钥是多久前录入的。重新保存连接会重置它,健康检查不会。 | 所谓 “已存 N 天” 超过策略年龄(默认 90 天)后显示徽标。仅作提示—— 不会有任何东西过期或停止工作. |
| 重试次数 | 遇到提供商限流或短时故障会按退避策略重试,而不是直接失败。重试的一定是读操作,因此不可能重复写入。 | 什么都没发生——这正是重点。本会报错的图块直接就加载出来了。 |
在企业代理后面?
HTTPS_PROXY 和 NO_PROXY ,之后所有连接器都会遵循。不设置的话,访问 Snowflake 或 Stripe 会表现为连接超时,而不会指出真正原因——所以某个本该能用的连接器不通时,先查这一项。数据目录
| 功能 | 能给你什么 |
|---|---|
| 列画像 | 行数、空值率、去重值数、每列的最小 / 最大值——在作图之前发现某列 90% 是空的,这是最快的办法。 |
| AI 生成描述 | 为表和列自动生成通俗描述。智能体也会读它们,所以描述完备的目录能实测提升工具选择的准确率。 |
| 血缘 | 一个数据集从哪里来、又有什么依赖它——数据准备流程、仪表板、度量。改动或删除之前先看这里。 |
| 业务术语表 | 术语只定义一次(比如“活跃客户”),再挂到列上,定义就随数据一起流动。 |
| 变更检测 | 定时抓取会报告新增、变更和移除的列,于是上游表结构变动表现为一条变更记录,而不是一个坏掉的仪表板。 |
| 所有者与状态 | 归谁所有,以及上次抓取是什么时候。 |
查询数据 任意数据集上的这个操作都会在工作台中打开它,并已载入该表。
SQL 工作台
对任何已连接的数据写 SQL。结果可以作图、加入 仪表板,或导出为 CSV / Excel。
-- Monthly revenue and order count for the last 12 months
SELECT date_trunc('month', o.created_at) AS month,
COUNT(*) AS orders,
SUM(o.amount) AS revenue
FROM orders o
WHERE o.status = 'settled'
AND o.created_at >= current_date - INTERVAL '12 months'
GROUP BY 1
ORDER BY 1;- 用自然语言提问 ——描述你的问题,助手来写 SQL。运行前先读一遍:它会明确告诉你这个答案依赖哪个联接和哪个筛选条件。
- 结果有条数上限 仅用于展示,同时会显示真实的匹配总数,因此失控的查询不会把页面卡死。
你的 SQL 由哪个引擎执行
针对 已连接数据仓库 的查询在该数仓上执行。针对 上传的表与已准备数据集 的查询运行在 DuckDB 上——工作台和“问 AI”在你的浏览器里跑,定时刷新、数据准备流程和智能体工具在服务端跑。
为什么这样设计
一次会话中的第一条查询会慢一些
该引擎是 WebAssembly,大约 8 MB,只下载一次,之后由浏览器缓存供后续访问使用。期间你会看到 “正在启动 SQL 引擎…” 以及一个进度条。
- 它的启动时机是 你一打开数据类页面,而不是等你按“运行”,所以通常在你还在选表的时候就已就绪。
- 它的下载频率是 每个浏览器一次,而不是每次查询、每个数据集或每个标签页一次。
- 它的来源是 你自己的部署,而不是 CDN——所以离网安装也能用,且没有第三方知道你加载过它。
如果它一直加载不完
把数据权限授予智能体
- 1
打开该智能体 → 工具
启用sql_query。同时启用calculator——参见下面的提醒。 - 2
设置允许访问的表
只有列在这里的表智能体才看得到。留空意味着 sql_query 无表可查。 - 3
在系统提示词里提到这些数据
e.g. “凡涉及计数、汇总或日期的问题都用 sql_query。能算出来的数字,绝不估算。” - 4
用一个计数问题测试
让它算一个总数。检查答案下方的来源是否指向那张表——如果指向的是文档,说明它是从文字里编出来的。
运行时智能体能看到每张表的名称、列和少量样本行,据此写出一条 SELECT,然后拿回真实数据行。
只读,且限定在你的权限内
SELECT 才被接受——写操作和 DDL 在执行前就会被拒。查询以你的身份、按行级安全策略运行,所以智能体读不到你读不到的表。当智能体为匿名嵌入访客运行时,它被显式限定在所有者的数据范围内。问题排查
| 现象 | 原因 | 解决办法 |
|---|---|---|
| “表不存在” | 不在允许访问的表里,或者智能体猜了个表名 | 把它加入允许访问的表;给命名晦涩的表改名;补上 AI 描述。 |
| 它查错了表 | 两个表名相似,且都没有描述 | 生成 AI 描述——模型正是靠它们来区分的。 |
| 日期筛选没有效果 | 该列被当成文本导入了 | 把表上该列的类型改为日期。 |
| Athena 连接失败 | 没有设置查询结果位置 | 设置 output_location 指向某个 S3 前缀,或在工作组上配置一个。 |
| 托管 Postgres 拒绝连接 | 没有启用 TLS | 设置 ssl 改为 require. |
| Snowflake 认证失败 | 用的是密码 | 该连接器需要的是编程访问令牌(PAT),不是你的账户密码。 |
| 连接器在内网主机上测试失败 | 出网防护 | 指向私有地址和链路本地地址的请求会被拒绝。数据库必须能从应用运行的位置访问到——参见 安装与部署. |
| 智能体算出来的总数不对 | 它自己做了算术 | 启用计算器工具,并把温度设为 0。 |