本書的主要內(nèi)容有:深入探討B(tài)igQuery的內(nèi)部工作方式,包括其整體架構。學習BigQuery支持的數(shù)據(jù)類型、函數(shù)和運算符。優(yōu)化查詢語句和schema,從而提高性能或降低成本。使用標準SQL中高級功能,如GIS、歷史快照、DDL/DML、用戶定義函數(shù)和腳本。使用BigQuery ML解決各類機器學習問題。學習如何保護數(shù)據(jù)、監(jiān)控作業(yè),以及授權用戶。
大規(guī)模數(shù)據(jù)倉庫、數(shù)據(jù)分析和機器學習.
你是否需要從PB級數(shù)據(jù)中獲取洞察,你是否希望構建協(xié)作、敏捷的工作空間?本書是Google BigQuery的規(guī)范參考書,它的存儲系統(tǒng)可以幫助你整合企業(yè)的全部數(shù)據(jù),其查詢引擎可以支持對大型數(shù)據(jù)集的交互式分析和機器學習。BigQuery幫助企業(yè)在一個便捷的框架中有效地存儲、查詢、導入數(shù)據(jù),并從中學習。
本書作者提供了在基于serverless、自動擴縮容的公共云上建立現(xiàn)代數(shù)據(jù)倉庫的實踐。無論你是想更全面地了解BigQuery,還是想專注于特定的任務,這份詳盡的指南都必不可少。
BigQuery改變了企業(yè)思考數(shù)據(jù)的方式。Jordan和Lak是了解BigQuery的人,本書是學習BigQuery的途徑。
Lloyd Tabb
Looker公司聯(lián)合創(chuàng)始人及首席技術官
前言
現(xiàn)如今,越來越多的企業(yè)都是數(shù)據(jù)驅(qū)動的,而數(shù)據(jù)倉庫則是任何數(shù)據(jù)戰(zhàn)略的關鍵組成之一,它是整個公司數(shù)據(jù)的中央存儲庫。數(shù)據(jù)倉庫通常被數(shù)據(jù)分析人員用來創(chuàng)建分析報告,但現(xiàn)在它也越來越多地被用于生成實時儀表盤、執(zhí)行即席查詢,以及通過預測分析提供決策指導。由于存在這些高級分析需求,以及逐漸向成本可控、敏捷和自助數(shù)據(jù)訪問轉(zhuǎn)變的趨勢,許多組織正轉(zhuǎn)向基于云的數(shù)據(jù)倉庫,如Google BigQuery。
在本書中,我們將全面介紹BigQuery,它是基于serverless 的、高度可伸縮、低成本的企業(yè)數(shù)據(jù)倉庫,可在Google Cloud 上使用。由于不需要管理基礎設施,企業(yè)可以專注于數(shù)據(jù)分析,通過使用熟悉的SQL 找到有意義的洞察。
BigQuery 設計的初衷就是為了提供一個數(shù)據(jù)平臺,該平臺不僅能夠提供前沿的技術能力,能充分利用云環(huán)境中現(xiàn)有的優(yōu)秀技術,還支持至今仍可靠適用的各種數(shù)據(jù)技術。例如,Google 的BigQuery 是一種serverless 的計算架構,它實現(xiàn)了計算和存儲分離。這使得架構中的不同層能夠獨立地運行和擴展,讓數(shù)據(jù)開發(fā)人員在設計和部署方面具備了靈活性。BigQuery 有一些獨特的功能,它支持本地機器學習和地理空間分析。通過Cloud Pub/Sub、Cloud Dataflow、Cloud Bigtable、Cloud AI Platform 和許多第三方集成工具,BigQuery 可以與傳統(tǒng)及現(xiàn)代系統(tǒng)交互,并滿足各類吞吐量和延遲需求。此外,BigQuery 還支持ANSI 標準的SQL、列優(yōu)化和聯(lián)邦查詢,這些特性是實現(xiàn)用戶自助式、即席數(shù)據(jù)分析的關鍵。
讀者對象
本書面向數(shù)據(jù)分析師、數(shù)據(jù)工程師和數(shù)據(jù)科學家,幫助他們使用BigQuery 從大數(shù)據(jù)集中獲得見解。數(shù)據(jù)分析師可以通過SQL、儀表板工具(如Looker、Data Studio 和Tableau)與BigQuery 交互。數(shù)據(jù)工程師可以借助Apache Spark 和Apache Beam 等框架,用Python 或Java 編寫數(shù)據(jù)pipeline,并將其與BigQuery集成。數(shù)據(jù)科學家可以在BigQuery 中構建機器學習模型,對BigQuery 中的數(shù)據(jù)運行TensorFlow 模型,并在Jupyter notebook 譯注1 中委托BigQuery 執(zhí)行分布式大規(guī)模運算。
排版約定
在本書中,使用以下排版約定:
斜體字(Italic)
表示新名詞、URL、電子郵件地址、文件名以及文件擴展名。
等寬字體(Constant width)
表示程序代碼,以及在正文中引用變量、函數(shù)名稱、數(shù)據(jù)類型、環(huán)境變量、語句、關鍵字等代碼中的元素。還用于展示命令和命令行的輸出。
等寬黑體(Constant width bold)
表示需要用戶輸入的命令或其他文本。
等寬斜體(Constant width italic)
需要替換成用戶自定義的值或根據(jù)上下文決定的值。
使用示例代碼
本書的目的是幫助你完成工作。本書中使用的示例代碼可以從GitHub(https://github.com/GoogleCloudPlatform/bigquery-oreilly-book)中找到。
總的來說,你可以在自己的程序或文檔中使用本書所提供的示例代碼。如果不是對這些代碼進行大規(guī)模的分發(fā),就不需要聯(lián)系我們獲取授權。比如,編寫一個程序,使用了本書中幾段示例代碼是不需要授權的。出售或分發(fā)包含OReilly圖書完整示例代碼的CD-ROM 則需要授權。引用書中的部分內(nèi)容或示例代碼來回答問題不需要授權。在你的產(chǎn)品文檔中包含本書中大量的示例代碼則需要授權。
我們不強制要求署名,但如果你這么做,我們深表感激。署名一般包括書名、作者、出版社和書號(ISBN)。例如:Google BigQuery: The Definitive Guide by Valliappa Lakshmanan and Jordan Tigani (OReilly). Copyright 2020 Valliappa Lakshmanan and Jordan Tigani, 978-1-492-04446-8.。
如果你覺得對示例代碼的使用超出了合理的方式或上述許可范圍,可以與我們聯(lián)系:permissions@oreilly.com。
Kubernetes 清單文件、代碼示例和其他在本書中使用的腳本都可以從GitHub 獲取。你可以復制這些代碼倉庫,按照不同的章節(jié)和內(nèi)容,直接使用這些代碼。
OReilly 在線學習平臺(OReilly Online Learning)
近40 年來,OReilly Media 致力于提供技術和商業(yè)培訓、知識和卓越見解,來幫助眾多公司取得成功。
我們有一群獨家專家和創(chuàng)新者,他們通過圖書、文章、會議和在線學習平臺分享知識和技術。OReilly 的在線學習平臺提供按需訪問的直播培訓課程、詳細的學習路徑、交互式編程環(huán)境,以及由OReilly 和其他200 多家出版社出版的書籍和視頻。詳情請訪問http://oreilly.com。
聯(lián)系我們
任何有關本書的意見或疑問,請按照以下地址聯(lián)系出版社。
美國:
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區(qū)西直門南大街2 號成銘大廈C 座807 室(100035)
奧萊利技術咨詢(北京)有限公司
我們?yōu)楸緯峁┝艘粋網(wǎng)頁,上面有勘誤表、示例和其他相關的信息,請訪問:https://oreil.ly/google_bigquery_tdg。
有關本書的建議或者技術問題,請發(fā)郵件到 bookquestions@oreilly.com。
有關其他圖書、講座、會議、新聞的信息,請訪問我們的網(wǎng)站:http://www.oreilly.com。
我們的Facebook:http://facebook.com/oreilly。
我們的Twitter:http://twitter.com/oreillymedia。
我們的YouTube:http://www.youtube.com/oreillymedia。
致謝
我們(Lak 和Jordan)非常幸運,感謝Elliott Brossard、Evan Jones、Graham Polley、Rebecca Ward 和Tegan Tigani 審核了本書的每一章,并提出了大量改進建議。Elliott 確保了SQL 語句簡潔干凈。Evan 在Google Finance 中使用BigQuery 的經(jīng)驗讓我們受益。Graham 在許多涉及成本和區(qū)域化的討論中,為我們帶來了有價值的客戶視角。Rebecca 讓我們實事求是,Tegan 確保我們的語言簡單明了。除了這五位,許多Google 工程師(Chad Jennings、Haris Khan、Misha Brukman、Daniel Gundrum、Mosha Pashumansky、Amir Hormati 和Mingge Deng)在他們的專業(yè)領域也審核了部分手稿。當然,任何遺留的錯誤都是我們造成的。
我們還要感謝我們各自的家人、同事和經(jīng)理(Rochana Golani 和Sudhir Hasbe)的支持。感謝OReilly 的編輯NicoleTaché 和Kristen Brown,很高興與你們合作。感謝我們的文字編輯Bob Russell,你敏銳的觀察力讓本書質(zhì)量得到了很大的提升。感謝Saptarshi Mukherjee,本書是你的創(chuàng)意,正是你促使我們兩人合作編寫了這本BigQuery 新書。后,感謝BigQuery 的用戶(和競爭對手),是你們推動著我們優(yōu)化BigQuery,同時也感謝BigQuery 工程團隊奇跡般地將其實現(xiàn)。我們將這本書100% 的版稅捐贈給我倆共同參與的金縣(King County)聯(lián)合慈善機構。我們強烈建議你參與當?shù)卮壬茩C構的捐贈、志愿者活動,采取行動幫助解決社區(qū)面臨的嚴峻挑戰(zhàn)。
Valliappa Lakshmanan是Google Cloud的數(shù)據(jù)分析和AI解決方案負責人。他的團隊借助BigQuery和Google Cloud上的其他數(shù)據(jù)分析、機器學習產(chǎn)品,構建軟件解決方案來解決業(yè)務問題。Jordan Tigani是BigQuery的產(chǎn)品管理總監(jiān)。作為BigQuery的創(chuàng)始工程師之一,他幫助數(shù)據(jù)倉庫發(fā)展成為Google Cloud中成功的產(chǎn)品之一。他擁有20年的軟件開發(fā)經(jīng)驗。
目錄
前言 . 1
第1 章 Google BigQuery 是什么 . 7
數(shù)據(jù)處理架構 7
關系數(shù)據(jù)庫管理系統(tǒng) 9
MapReduce 框架 .10
BigQuery: 一個Serverless、分布式 SQL 引擎 11
使用BigQuery 13
從數(shù)據(jù)集中獲得洞察 .13
ETL、EL 和ELT .15
強大的分析能力 17
易于管理 .19
BigQuery 起源 20
是什么使BigQuery 成為可能? 23
計算和存儲分離 23
存儲和網(wǎng)絡基礎設施 .24
存儲托管 .26
與Google Cloud Platform 集成 27
安全與合規(guī).28
小結(jié) .29
第2 章 基礎查詢語法 . 31
簡單查詢 32
使用SELECT 檢索行 33
使用AS 給列設置別名 .35
使用WHERE 進行過濾 .36
SELECT *、EXCEPT 和REPLACE 38
帶WITH 的子查詢 .39
使用ORDER BY 進行排序 40
聚合 .40
使用GROUP BY 計算聚合 40
使用COUNT 統(tǒng)計記錄數(shù) 42
使用HAVING 過濾分組項 .42
使用DISTINCT 查找值 .43
數(shù)組與結(jié)構體簡介 45
使用ARRAY_AGG 創(chuàng)建數(shù)組 46
結(jié)構體數(shù)組.49
元組 50
使用數(shù)組 .50
UNNEST 數(shù)組 51
Join 表 52
Join 釋疑 .53
內(nèi)連接 56
交叉連接 .57
外連接 59
保存和分享 60
查詢歷史記錄和緩存 .60
已保存的查詢 62
視圖與分享查詢 63
小結(jié) .63
第3 章 數(shù)據(jù)類型、函數(shù)和運算符 65
數(shù)值類型和函數(shù) 66
數(shù)學函數(shù) 67
標準兼容的浮點除法 .68
SAFE 函數(shù) 68
比較 69
使用NUMERIC 進行精確的十進制計算 70
使用BOOL 72
邏輯運算符.72
條件表達式.74
使用COALESCE 進行更簡潔的NULL 處理 74
顯式類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換 76
使用COUNTIF 避免對Boolean 值進行顯式類型轉(zhuǎn)換 78
字符串函數(shù).79
國際化 80
打印和解析.82
字符串操作函數(shù) 83
轉(zhuǎn)換函數(shù) .83
正則表達式.84
字符串函數(shù)總結(jié) 85
使用TIMESTAMP 86
解析和格式化時間戳 .87
提取日歷信息的各部分 88
時間戳運算.89
Date、Time 和DateTime 90
使用GIS 函數(shù).91
小結(jié) .92
第4 章 將數(shù)據(jù)加載到BigQuery . 95
基礎知識 96
從本地數(shù)據(jù)源加載 .96
指定Schema 104
復制到新表107
數(shù)據(jù)管理(DDL 和DML) 108
高效加載數(shù)據(jù) . 110
聯(lián)邦查詢和外部數(shù)據(jù)源 113
如何使用聯(lián)邦查詢 113
何時使用聯(lián)邦查詢和外部數(shù)據(jù)源 . 118
Google Sheets 數(shù)據(jù)的交互式探索與查詢 .126
對Cloud Bigtable 數(shù)據(jù)進行SQL 查詢 136
傳輸和導出 142
數(shù)據(jù)傳輸服務 .142
導出Stackdriver 日志 .148
使用Cloud Dataflow 讀/ 寫B(tài)igQuery 150
遷移自有數(shù)據(jù) 155
小結(jié) 158
第5 章 使用BigQuery 進行開發(fā) 161
以編程的方式進行開發(fā) 161
通過REST 接口使用BigQuery .161
Google Cloud 客戶端庫 .170
通過數(shù)據(jù)科學工具訪問BigQuery .189
Google Cloud Platform 上使用Notebook .190
使用BigQuery、pandas 和Jupyter .195
通過R 使用BigQuery 200
Cloud Dataflow 202
JDBC/ODBC 驅(qū)動 205
將BigQuery 數(shù)據(jù)導入Google Slides(G 套件).206
通過Bash 腳本使用BigQuery .208
創(chuàng)建數(shù)據(jù)集和表 209
執(zhí)行查詢 212
BigQuery 對象 214
小結(jié) 216
第6 章 BigQuery 架構 219
高層架構 219
查詢請求的生命周期 220
BigQuery 升級 225
查詢引擎 Dremel 225
Dremel 架構 227
查詢執(zhí)行 233
存儲 249
數(shù)據(jù)存儲 249
元數(shù)據(jù) 256
小結(jié) 266
第7 章 性能與成本優(yōu)化 . 267
需要遵循的原則 .267
影響性能的主要因素 268
控制成本 268
度量和故障排除 .270
使用 REST API 衡量查詢速度 271
使用BigQuery Workload Tester 測量查詢速度 .273
使用Stackdriver 排除任務故障 .275
讀取查詢計劃信息 277
提高查詢速度 .282
小化I/O 284
緩存歷史查詢結(jié)果 .289
執(zhí)行有效連接 .293
避免壓垮worker303
使用近似聚合函數(shù) 307
HLL 函數(shù) .309
優(yōu)化數(shù)據(jù)的存儲和訪問方式 . 311
小化網(wǎng)絡開銷 311
選擇有效的存儲格式 315
通過表分區(qū)減少掃描量 .325
基于高基數(shù)鍵的聚簇表 .329
時間不敏感的用戶場景 333
批處理查詢334
文件加載 335
小結(jié) 336
第8 章 高級查詢 339
可復用查詢 339
參數(shù)化查詢340
用戶自定義SQL 函數(shù) 346
復用部分查詢 .351
高級SQL 355
使用數(shù)組 356
窗口函數(shù) 366
表元數(shù)據(jù) 373
數(shù)據(jù)定義語言和數(shù)據(jù)操作語言 376
擴展SQL 383
JavaScript UDF 383
編寫腳本 385
高級函數(shù) 393
BigQuery 地理信息系統(tǒng) 393
常用的統(tǒng)計函數(shù) 401
哈希算法 403
小結(jié) 407
第9 章 BigQuery 中的機器學習 409
什么是機器學習 .409
設計機器學習問題 410
機器學習的種類 412
構建回歸模型 415
選擇標簽 415
探索數(shù)據(jù)集以尋找特征 .416
租車點的影響 .417
創(chuàng)建訓練數(shù)據(jù)集 420
訓練和評估模型 421
用模型預測423
檢查模型權重 .426
更復雜的回歸模型 428
構建分類模型 433
訓練 .434
預測 .437
選擇閾值 437
自定義BigQuery ML 439
控制數(shù)據(jù)分割 .439
平衡類別 441
正則化 442
k-Means 聚類 443
什么在被聚集? 443
聚類自行車租賃點 444
進行聚類 446
理解聚類 446
數(shù)據(jù)驅(qū)動決策 .449
推薦系統(tǒng) 449
MovieLens 數(shù)據(jù)集 450
矩陣分解 451
進行推薦 453
整合用戶和電影信息 456
在GCP 上自定義機器學習模型 .463
超參數(shù)調(diào)整463
AutoML .468
Tensorflow 支持 469
小結(jié) 474
第10 章 BigQuery 安全管理 477
安全基礎設施 477
IAM 479
身份驗證 479
角色 .480
資源 .483
管理BigQuery .484
作業(yè)管理 484
授權用戶 485
恢復已刪除的記錄和表 .485
持續(xù)集成/ 持續(xù)部署 486
成本、賬單報表 489
儀表板、監(jiān)控和審計日志 492
可用性、故障恢復和加密 .493
Zone、區(qū)域(Region)和多區(qū)域 .494
BigQuery 故障處理 .494
持久化、備份和故障恢復 498
隱私和加密499
監(jiān)管與合規(guī) 500
數(shù)據(jù)本地化500
限制對數(shù)據(jù)子集的訪問 .501
刪除與單個個人相關的所有交易 .505
數(shù)據(jù)丟失預防 .510
CMEK 510
數(shù)據(jù)滲漏保護 .513
小結(jié) 514
作者介紹 515
封面介紹 515