指定來源
FROM指定要處理的資料表或結果。
依目的查找SQL,從查詢與彙總到COPY INTO、更新、物件定義及權限管理,比較Snowflake與BigQuery的語法、前提及變化。
收錄23組查詢比較與22個操作主題。「代表範例」不代表涵蓋所有選項或產品指令。
操作語法確認:2026-10-06
| 領域 | 語法與功能 | 收錄狀態 | 官方資料 |
|---|---|---|---|
| 查詢與分析 | SELECT / JOIN / GROUP BY / WINDOW | 代表範例 | Snowflake · BigQuery |
| 載入與匯出 | COPY INTO / LOAD DATA / EXPORT DATA | 代表範例 | Snowflake · BigQuery |
| 資料操作 | INSERT / UPDATE / DELETE / MERGE / TRUNCATE | 代表範例 | Snowflake · BigQuery |
| 物件定義 | TABLE / VIEW / SCHEMA / FUNCTION / PROCEDURE | 代表範例 | Snowflake · BigQuery |
| 交易、權限與指令碼 | TRANSACTION / GRANT / REVOKE / DECLARE / INFORMATION_SCHEMA | 代表範例 | Snowflake · BigQuery |
| 自動化與管線 | PIPE / STREAM / TASK / DYNAMIC TABLE / scheduled queries | 僅提供官方參考 | Snowflake · BigQuery |
| 外部及特殊資料表 | EXTERNAL TABLE / ICEBERG / SNAPSHOT / CLONE / MATERIALIZED VIEW | 僅提供官方參考 | Snowflake · BigQuery |
| 帳戶與運算資源 | ACCOUNT / USER / ROLE / WAREHOUSE / IAM / reservations | 僅提供官方參考 | Snowflake · BigQuery |
| 安全性與共用 | POLICY / MASKING / ROW ACCESS / sharing / connections | 僅提供官方參考 | Snowflake · BigQuery |
| 機器學習與產品擴充 | ML / Cortex / search indexes / vector indexes / applications | 僅提供官方參考 | Snowflake · BigQuery |
COPY INTO <table> / LOAD DATA INTOCOPY INTO <location> / EXPORT DATACREATE STAGE / FROM FILESVALIDATION_MODE / LOAD DATAINSERT INTO / INSERT INTOUPDATE / UPDATEDELETE FROM / DELETE FROMMERGE INTO / MERGE INTOTRUNCATE TABLE / TRUNCATE TABLECREATE TABLE / CREATE TABLECREATE TABLE AS SELECT / CREATE TABLE AS SELECTCREATE VIEW / CREATE VIEWALTER TABLE / ALTER TABLEDROP TABLE / DROP TABLEBEGIN TRANSACTION / BEGIN TRANSACTIONGRANT / GRANTREVOKE / REVOKECREATE SCHEMA / CREATE SCHEMASHOW TABLES / INFORMATION_SCHEMADECLARE / DECLARECREATE FUNCTION / CREATE FUNCTIONCREATE PROCEDURE / CREATE PROCEDURE涵蓋查詢與主要操作陳述式。收錄表區分範例與僅提供官方參考的範圍。
FROM指定要處理的資料表或結果。
WITH與FROM中的子查詢可表達相同的中間結果。
符合 / 左側全部 / 兩側全部 / 所有組合。
LEFT JOIN的條件位置會改變保留的列。
將複合值的元素展開,增加列數。
WHERE在彙總前、HAVING在彙總後、QUALIFY在window後。
依要計數的對象與摘要的作用選擇。
WITHIN GROUP決定彙總值的順序;BigQuery在彙總函數括號內使用ORDER BY。
在彙總函數內控制重複值、NULL、最大值所在列與輸入數量。
GROUP BY建立彙總單位;DISTINCT移除所選輸出列的重複。
Aggregate:N列→每組1列。Window:N列→N列。
流水號 / 同名次後跳號 / 同名次後不跳號。
依同一順序將前後值附加到各列。
IGNORE/RESPECT NULLS控制函數處理的值;NULLS FIRST/LAST控制排序位置。
ROWS依列位置;RANGE依排序值定義範圍。
比較回傳TRUE、FALSE或NULL,再用邏輯運算組合。
與NULL的等號比較為未知,應用IS NULL判斷。
CASE支援多條件,IF / IFF簡寫兩種結果。
無法轉換的值:CAST報錯,安全版回傳NULL。
ABS取絕對值,ROUND取指定小數位。
對同一字串套用四種操作。
作用相同,引數順序與單位語法不同。
即使都顯示7,回傳型態仍不同。
相同A、B:保留重複 / 去重 / 共有 / 僅左側。
位置不同仍依相同欄名對應。
去重 → 排序 → 跳過開頭 → 取得上限筆數。
Snowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
準備空的orders表及含id,amount標頭的CSV。上傳至Snowflake內部暫存區csv_stage,或符合BigQuery位置條件的Cloud Storage,並替換YOUR_BUCKET。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
COPY INTO tbi_lab.orders
FROM @tbi_lab.csv_stage/orders.csv
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1)
ON_ERROR = 'ABORT_STATEMENT';將檔案資料列載入資料表。請檢查載入結果與目標資料。
SELECT id, amount FROM tbi_lab.orders ORDER BY id;ON_ERROR控制錯誤處理;ABORT_STATEMENT中止陳述式。載入紀錄可能使重跑時略過已載入檔案。FORCE=TRUE可能造成重複資料。
官方資料 · Snowflake 1
# load-filesSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
準備含兩列的orders表與可寫入的位置。Snowflake使用csv_stage;BigQuery使用替換YOUR_BUCKET後的Cloud Storage。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
COPY INTO @tbi_lab.csv_stage/export_run/
FROM (SELECT id, amount FROM tbi_lab.orders)
FILE_FORMAT = (TYPE = CSV)
HEADER = TRUE;將查詢結果寫入CSV檔案,並在目的地確認。
LIST @tbi_lab.csv_stage/export_run/;每次使用新的目的地。輸出可能有多個檔案,請檢查數量及內容。
官方資料 · Snowflake 1
# unload-filesSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
準備tbi_lab及所需的建立、讀取權限。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
CREATE FILE FORMAT tbi_lab.csv_format
TYPE = CSV SKIP_HEADER = 1;
CREATE STAGE tbi_lab.csv_stage
FILE_FORMAT = (FORMAT_NAME = 'tbi_lab.csv_format');在Snowflake建立空的內部暫存區及CSV格式定義。
LIST @tbi_lab.csv_stage;建立暫存區不會自動上傳檔案。請透過Snowsight或支援PUT的用戶端上傳orders.csv。PUT用於內部暫存區。
官方資料 · Snowflake 1 · Snowflake 2 · Snowflake 3
# stage-formatSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
準備空的orders表及含id,amount標頭的CSV。上傳至Snowflake內部暫存區csv_stage,或符合BigQuery位置條件的Cloud Storage,並替換YOUR_BUCKET。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
COPY INTO tbi_lab.orders
FROM @tbi_lab.csv_stage/orders.csv
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1)
VALIDATION_MODE = 'RETURN_ERRORS';Snowflake會傳回檔案錯誤,不會新增資料列。
SELECT id, amount FROM tbi_lab.orders ORDER BY id;VALIDATION_MODE只驗證、不載入,不能與轉換SELECT合用。請修正錯誤後再執行一般COPY。
官方資料 · Snowflake 1
# validate-loadSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
INSERT INTO tbi_lab.orders (id, amount)
VALUES (3, 300);新增id=3、amount=300的資料列。
SELECT id, amount FROM tbi_lab.orders ORDER BY id;官方資料 · Snowflake 1
# insert-rowsSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
UPDATE tbi_lab.orders SET amount = 150 WHERE id = 1;將id=1的amount改成150。
SELECT id, amount FROM tbi_lab.orders ORDER BY id;先用相同WHERE的SELECT確認目標列。BigQuery的UPDATE與DELETE必須有WHERE。
官方資料 · Snowflake 1
# update-rowsSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
DELETE FROM tbi_lab.orders WHERE id = 2;刪除id=2的資料列。
SELECT id, amount FROM tbi_lab.orders ORDER BY id;先用相同WHERE的SELECT確認目標列。BigQuery的UPDATE與DELETE必須有WHERE。
官方資料 · Snowflake 1
# delete-rowsSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
MERGE INTO tbi_lab.orders AS t
USING (SELECT 1 AS id, 150 AS amount
UNION ALL SELECT 3, 300) AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET amount = s.amount
WHEN NOT MATCHED THEN INSERT (id, amount)
VALUES (s.id, s.amount);將id=1更新為150,並新增id=3、amount=300。
SELECT id, amount FROM tbi_lab.orders ORDER BY id;請避免多個來源列符合一個更新目標鍵值。重複符合的處理依產品及操作而異。
官方資料 · Snowflake 1
# merge-rowsSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
TRUNCATE TABLE tbi_lab.orders;資料列數變成0,欄位定義保留。
SELECT COUNT(*) AS rows_left FROM tbi_lab.orders;對象是所有資料列,不能使用WHERE篩選。
官方資料 · Snowflake 1
# truncate-tableSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
先準備tbi_lab,並確認要建立的物件名稱尚未使用。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
CREATE TABLE tbi_lab.orders (id INTEGER, amount NUMBER(12,2));建立含id與amount兩欄的空表。
DESCRIBE TABLE tbi_lab.orders;這些範例不使用會取代現有資料的OR REPLACE。
官方資料 · Snowflake 1
# create-tableSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
先準備tbi_lab,並確認要建立的物件名稱尚未使用。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
CREATE TABLE tbi_lab.large_orders AS
SELECT id, amount FROM tbi_lab.orders WHERE amount >= 200;將amount大於或等於200的資料列存入新表。
SELECT * FROM tbi_lab.large_orders ORDER BY id;這些範例不使用會取代現有資料的OR REPLACE。
官方資料 · Snowflake 1
# create-as-selectSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
先準備tbi_lab,並確認要建立的物件名稱尚未使用。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
CREATE VIEW tbi_lab.large_orders_view AS
SELECT id, amount FROM tbi_lab.orders WHERE amount >= 200;儲存查詢定義。一般檢視表不保留結果資料列的複本。
SELECT * FROM tbi_lab.large_orders_view ORDER BY id;ALTER VIEW與DROP VIEW修改或刪除檢視表定義。請確認來源資料表的相依關係。
官方資料 · Snowflake 1
# create-viewSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
ALTER TABLE tbi_lab.orders ADD COLUMN note VARCHAR;新增note欄;現有資料列的值為NULL。
DESCRIBE TABLE tbi_lab.orders;此例新增欄位。刪除欄位或變更型別需要另外檢查資料與相依關係。
官方資料 · Snowflake 1
# alter-tableSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
DROP TABLE tbi_lab.orders;刪除資料表定義及其資料。
SHOW TABLES LIKE 'ORDERS' IN SCHEMA tbi_lab;能否還原取決於產品保留設定等條件。不要假設可還原。
官方資料 · Snowflake 1
# drop-tableSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
CREATE SCHEMA tbi_lab;
USE SCHEMA tbi_lab;建立用來放置物件的tbi_lab。
SELECT CURRENT_DATABASE(), CURRENT_SCHEMA();在目前資料庫建立結構描述。USE SCHEMA切換預設名稱空間。
官方資料 · Snowflake 1 · Snowflake 2
# namespaceSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
先準備tbi_lab,並確認要建立的物件名稱尚未使用。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
CREATE FUNCTION tbi_lab.add_one(x INTEGER)
RETURNS INTEGER LANGUAGE SQL
AS $$ x + 1 $$;建立將輸入加1的函式。
SELECT tbi_lab.add_one(2) AS result;官方資料 · Snowflake 1
# user-functionSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
先準備tbi_lab,並確認要建立的物件名稱尚未使用。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
CREATE PROCEDURE tbi_lab.answer()
RETURNS INTEGER LANGUAGE SQL
AS $$
BEGIN
RETURN 3;
END;
$$;建立呼叫時傳回3的程序。
CALL tbi_lab.answer();官方資料 · Snowflake 1
# procedureSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
從tbi_lab.orders(id, amount)含有(1,100)、(2,200)開始。每個範例前請還原初始狀態,不要依序執行全部範例。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
BEGIN TRANSACTION;
UPDATE tbi_lab.orders SET amount = 150 WHERE id = 1;
ROLLBACK;此例復原更新,因此id=1的amount仍為100。
SELECT id, amount FROM tbi_lab.orders ORDER BY id;COMMIT提交,ROLLBACK復原。Snowflake的DDL會隱含提交進行中的交易,因此不要在此例加入DDL。
官方資料 · Snowflake 1
# transactionSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
需要orders表及管理授權的權限。請先準備Snowflake的tbi_reader角色,或確認BigQuery的收件群組。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
GRANT SELECT ON TABLE tbi_lab.orders TO ROLE tbi_reader;授予指定對象讀取資料表的權限。
SHOW GRANTS ON TABLE tbi_lab.orders;除了資料表SELECT,也要確認資料庫、結構描述的USAGE及warehouse權限。
官方資料 · Snowflake 1
# permissions-grantSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
需要orders表及管理授權的權限。請先準備Snowflake的tbi_reader角色,或確認BigQuery的收件群組。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
REVOKE SELECT ON TABLE tbi_lab.orders FROM ROLE tbi_reader;撤銷指定的直接授權;其他途徑的權限可能仍存在。
SHOW GRANTS ON TABLE tbi_lab.orders;此REVOKE不會移除其他角色或上層資源繼承的存取權。請檢查有效權限。
官方資料 · Snowflake 1
# permissions-revokeSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
準備tbi_lab及所需的建立、讀取權限。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
SHOW TABLES IN SCHEMA tbi_lab;傳回可存取的資料表與欄位中繼資料。
DESCRIBE TABLE tbi_lab.orders;官方資料 · Snowflake 1 · Snowflake 2
# inspect-objectsSnowflake · 這是供所選產品執行的SQL範例,本頁不會執行。已對照官方文件,尚未在雲端帳戶實際執行。
假設Snowflake已選定資料庫,BigQuery已選定專案。tbi_lab是練習用的結構描述或資料集。
請在有權限的練習環境中使用,確認名稱、儲存位置與授權對象。雲端執行及儲存可能產生費用。
EXECUTE IMMEDIATE $$
DECLARE n INTEGER DEFAULT 2;
BEGIN
RETURN n + 1;
END;
$$;將變數從2改為3,並傳回3。
將預期變化與環境中的結果、權限設定或目的地內容對照。
BEGIN…END是程序區塊,與BEGIN TRANSACTION不同。
官方資料 · Snowflake 1 · Snowflake 2
# script同一位顧客有3筆訂單時,結合結果就會出現該顧客3次。改變訂單數與SQL,觀察配對的資料列。
可執行一個以SELECT或WITH開頭的唯讀陳述式。資料表為customers和orders。最多顯示200列。
選擇範例或編輯SQL,再按執行。
首先,FROM讀取顧客資料表customers,AS c則讓這個查詢以c作為customers的別名。
接著,INNER JOIN結合訂單資料表orders。AS o將orders稱為o,ON c.id = o.customer_id只保留顧客編號c.id與訂單的顧客編號o.customer_id相等的配對。同一顧客有多筆訂單時,就會產生多列。
SELECT取出顧客編號c.id、姓名c.name及訂單編號o.id。AS order_id將o.id的輸出欄命名為order_id。
最後,ORDER BY c.id, o.id先依顧客編號由小到大排列,再將同一顧客的訂單編號由小到大排列。
c.id中的點號「.」連接資料表別名與欄名,逗號「,」分隔欄位或運算式,分號「;」結束SQL陳述式。
此執行區使用SQLite,與上方Snowflake / BigQuery切換獨立。使用虛構資料,在瀏覽器內執行SQL。輸入不會儲存或傳送。首次執行時會從外部CDN載入引擎。