阿里雲交互式分析與Presto對比分析及使用注意事項

阿里雲交互式分析與Presto對比分析及使用注意事項本文由阿里巴巴耿江濤帶來以“阿里雲交互式分析與Presto對比分析及使用注意事項”為題的演講。文章首先介紹了Presto以及它的應用場景、特點、架構和原理、數據模型、數據類型,並且以Presto數據查詢作為實例。然後介紹了阿里雲交互式分析,同時列舉了它的優勢和典型應用場景,對權限、數據類型、實例對象層級進行講解,並且對交互式分析的兩大場景進行實踐分析,列舉了幾種表的特徵設置,以阿里雲交互式分析開發作為示例展示其過程。最後,概括性的總結了阿里雲交互式分析與Presto的區別。

以下為精彩視頻內容整理:Presto介紹Presto的應用場景 Presto是定位在數據倉庫和數據分析業務的分佈式SQL引擎,比較適合的應用場景有ETL、Ad-Hoc查詢、海量結構化數據與半結構化數據分析以及海量多維數據聚合與報表。特別需要注意的是,Presto是一個數倉類產品,其設計目標並不是為了替代MySQL、PostgreSQL等傳統的RDBMS數據庫,對事務支持有限,不適合在線業務場景。Presto的數據都是在內存中,限制了在內存中的數據集大小。比如多個大表的join,這些大表是不能完全放進內存的。實際應用中,對於在presto的查詢是有一定規定條件的,一個查詢在presto查詢超過30分鐘,就需要殺掉這個任務,這說明該查詢不適合在presto上使用。主要原因是,查詢過大的話,會佔用整個集群的資源,這會導致後續的查詢是沒有資源進行查詢的,這與presto的設計理念是衝突的。如果在進行一個查詢時,要等5分鐘才有資源繼續查詢,這是不合理的,達不到理想的效果。Presto的特點 Presto有以下幾個特點:• 多數據源目前Presto可以支持Mysql、PostgreSQL、Cassanda、Hive、Kafka、JMX等多種Connector。 • 支持SQL Presto已經可以完全支持ANSI SQL,並提供一個SQL Shell給用戶,用戶可以直接使用ANSI SQL進行數據查詢和計算。• 擴展性Presto有很好的擴展性,開發人員可以很容易地開發出適合於自己特定數據源的Connector,並且可以使用SQL語句查詢和分析自定義Connector中的數據。• 混合計算在數據庫中的每種數據源都對應一種特定的Connector,用戶可以根據業務需要在Presto中針對一種類型的Connector配置一個或者多個Catalog並查詢其中的數據,用戶可以混合多個Catalog進行join查詢和計算。• 高性能經測試,Presto的查詢平均性能是Hive的10倍以上。• 流水線由於Presto是基於PipeLine進行設計的,因此在進行海量數據處理的過程中,終端用戶不用等到所有的數據處理完畢才能看到結果,而是可以像自來水管道一樣,一旦計算開始,就可以立即產生一部分結果數據,並且結果數據會一部分一部分地呈現在終端客戶面前。Presto架構及其原理

阿里雲交互式分析與Presto對比分析及使用注意事項

如上圖所示為Presto的架構圖,其中Coordinator表示中心的查詢角色,作用是接收查詢請求、解析SQL、生成執行計劃、任務調度以及worker管理。coordinator進行是presto集群的master進程。Worker是執行任務的節點。Connector是presto以插件形式對數據存儲層進行了抽象,稱作連接器,不僅包含Hadoop相關組件的連接器,還包括RDBMS連接器。 Discovery service是將coordinator和worker結合在一起的服務;worker節點啟動後向discovery service服務註冊,coordinator通過discovery service獲取註冊的worker節點。從架構圖可以看出,Presto具有混合計算的優勢,可以連接多種connector。Presto的數據模型

阿里雲交互式分析與Presto對比分析及使用注意事項

Presto的數據模型主要分為三個層級,第一個層級為Catalog,一個 Catalog 可以包含多個 Schema,物理上指向一個外部數據源,可以通過Connector訪問該數據源。此外,一次查詢可以訪問一個或多個Catalog。第二個層級為Schema,它相當於一個數據庫示例,一個Schema包含多張數據表。第三個層級為Table,表示數據表,它與一般意義上的數據庫表相同。

阿里雲交互式分析與Presto對比分析及使用注意事項

對於使用Presto,首先登錄服務器客戶端,輸入hive命令並創建數據庫為git_database。然後在客戶端輸入命令,可以連接到在hive創建的數據庫git_database,連接命令為presto --server emr-header-1:9090 --catalog hive --schema --user hadoop。

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖為連接Presto的命令以及相應參數解釋。Presto的數據類型Presto的數據類型分為數值類型、字符類型、日期和時間和複雜類型。其中數值類型有BOOLEAN,表示一個二值選項,值為TRUE或FALSE。TINYINT表示一個8位有符號整型,以二進制補碼形式存儲。SMALLINT表示一個16位有符號整型,以二進制補碼形式存儲。INTEGER表示一個32位有符號整型,以二進制補碼形式存儲。BIGINT表示一個64位有符號整型,以二進制補碼形式存儲。DOUBLE表示一個64位多精度的二進制浮點數值類型。 DECIMAL表示一個固定精度的數值類型,最大可支持38位有效數字,有效數字在17位以下性能最好。定義DECIMAL類型字段時需要確定兩個字面參數:一是精度(precision)數值總的位數,不包括符號位,二是範圍(scale)小數位數,可選參數,默認為0。示例:DECIMAL '-10.7'該值可用DECIMAL(3,1)類型表示。字符類型有VARCHAR表示一個可變長度的字符串類型,可以設置最大長度。示例:VARCHAR,VARCHAR(10)。CHAR表示一個固定長度的字符串類型,使用時可以指定字符串的長度,不指定則默認為1。示例:CHAR,CHAR(10)。日期和時間有DATE,表示一個日期類型的字段,日期包括年、月、日,但是不包括時間。示例:DATE ‘1988-01-30’。TIME表示一個時間類型,包括時、分、秒、毫秒。時間類型可以加時區進行修飾。示例:TIME '18:01:02.345',無時區定義,使用系統時區進行解析。TIME '18:01:02.345 Asia/Shanghai',有時區定義,使用定義的時區進行解析。TIMESTAMP表示一個時間戳類型的字段,時間戳包含了日期和時間兩個部分的信息,取值範圍為'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC,支持使用時區進行修飾。示例:TIMESTAMP '1988-01-30 01:02:03.321',TIMESTAMP '1988-01-30 01:02:03.321 Asia/Shanghai’ 。INTERVAL主要用於時間計算表達式中,表示一個間隔,單位可以是如下幾個:YEAR-年、QUARTER-季度、MONTH-月、DAY-天、HOUR-小時、MINUTE-分鐘、SECOND-秒、MILLISECOND-毫秒。示例:DATE '2012-08-08' + INTERVAL '2' DAY。複雜類型有JSON,表示字段為一個JSON字符串,包括JSON對象、JSON數組、JSON單值(數值或字符串),還包括布爾類型的true、false以及表示空的null。示例:JSON '[1,null, 1988]'JSON '{"k1":1,"k2": "abc"}’。ARRAY表示一個數組,數組中各個元素的類型必須一致。示例:ARRAY[1,2,3]。MAP表示一個映射關係,由鍵數組和值數組組成。示例:MAP(ARRAY['foo','bar'],ARRAY[1,2])。ROW表示一行數據,行中每個列都有列名對應,可以使用運算符+列名的方式來訪問數據列。示例:CAST(ROW(1988,1.0,30) AS ROW(y BIGINT,m DOUBLE,d TINYINT ))。IPADDRESS表示一個IPv4或IPv6地址。內部實現上,將IPv4處理成IPv6地址使用(IPv4到IPv6映射表)。示例:IPADDRESS '0.0.0.0', IPADDRESS '2001:db8::1'。Presto數據查詢示例 在hive中創建分區表和非分區表,並創建庫和表:• 非分區表創建CREATE TABLE weather (

<code>city STRING ,
temp_lo int, -- 最低溫度
temp_hi int -- 最高溫度/<code>

); INSERT INTO weather VALUES

<code>('beijing',40,50),
('hangzhou',46,55);/<code>

• 分區表創建 create table odps_test2( shop_name string, customer_id string, total_price INT )partitioned by (sale_date string);INSERT overwrite table odps_test2 partition (sale_date='2013')values ('shop', '1234', 12);INSERT overwrite table odps_test2 partition (sale_date='2014')values ('rest', '1111', 13);INSERT overwrite table odps_test2 partition (sale_date='2015')values ('texy', '2222', 14);

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為Presto非分區表查詢。

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為Presto分區表查詢。阿里雲交互式分析介紹什麼是交互式分析 交互式分析是大數據生態體系下的實時交互式分析產品,支持PB級數據高併發實時寫入實時查詢,完全兼容PostgreSQL協議,可以使用主流BI工具(如Tableau、帆軟等)或SQL客戶端輕鬆訪問數據、開展BI分析或者即席查詢分析。 在離線大數據場景上,交互式分析(Interactive Analytics)與MaxCompute無縫打通,為MaxCompute提供交互式查詢服務,真正實現“一套數據,兩種計算”。使用熟悉的工具以標準SQL查詢分析MaxCompute項目中的數據,快速獲取查詢結果。也可使用主流BI工具(如Tableau、帆軟等)或SQL客戶端輕鬆連接到MaxCompute項目,開展BI分析或即席查詢。也可以利用交互式分析(Interactive Analytics)的快速查詢特性,將項目表數據封裝成API對外服務,無需數據遷移就能夠支持更豐富的應用場景。 交互式分析(Interactive Analytics)提供無服務器計算(Serverless)的服務方式,無需管理任何基礎設施,只需為運行的查詢付費。交互式分析的優勢 交互式分析(Interactive Analytics)兼容PostgreSQL生態、支持MaxCompute數據直接查詢分析,支持實時寫入實時查詢,實時離線聯邦分析,低成本、高時效、快速構築企業實時數據倉庫。 • 極速響應 PB級數據亞秒級查詢響應,滿足用戶實時多維分析透視和業務探索需求。支持向量化計算及列存儲智能索引,性能大幅領先於開源系統。 • MaxCompute加速查詢 無縫對接MaxCompute,無需移動數據,直接交互式分析,快速獲取查詢結果。可以單獨查詢MaxCompute,也可以與實時數據結合進行聯合計算。 • 高併發實時寫入和查詢 支持高併發實時數據的實時寫入和實時查詢,寫入速度可達數億TPS,寫入即可查。 • 統一引擎架構 採用統一的引擎架構,支持行存和列存兩種存儲模式,同時滿足點查詢、即席查詢及OLAP場景。 • 簡單易用 兼容PostgreSQL生態,與大數據計算引擎及智能雲研發平臺DataWorks無縫鏈接。交互式分析典型應用場景

阿里雲交互式分析與Presto對比分析及使用注意事項

實時數倉場景如上圖所示。業務數據實時寫入實時計算,並將數據進行ETL處理,再由交互式分析實時查詢,最終輸出到第三方分析工具,實現實時數據的實時分析。該場景下的典型應用有:數據部門的實時數倉、實時大屏、實時Reporting報表分析。也用於運維和數據應用的實時監控、實時異常檢測預警、實時Debug。同時用於業務部門的實時風控、實時推薦、實時效果分析、實時訓練等。

阿里雲交互式分析與Presto對比分析及使用注意事項

MaxCompute加速查詢場景如上圖所示。業務數據寫入離線數倉MaxCompute,由交互式分析直接加速查詢或導入查詢,再對接BI分析工具,輕鬆實現離線數據的實時分析。該場景下的典型應用有:MaxCompute離線數據的實時查詢。此外,也用於MaxCompute離線數據報表分析以及MaxCompute離線數據的在線應用輸出(例如RESTful API)。

阿里雲交互式分析與Presto對比分析及使用注意事項

實時離線聯邦分析場景如上圖所示。業務數據按冷熱分開存儲,冷數據存儲在離線數倉MaxCompute,熱數據存儲在交互式分析,通過交互式分析實現實時離線數據聯邦分析,再對接BI分析工具,快速響應簡單查詢與複雜多維分析的業務要求。 交互式分析權限介紹

阿里雲交互式分析與Presto對比分析及使用注意事項

實例內的角色層級關係和權限介紹如上圖所示。以下為交互式分析(Interactive Analytics)中常用的角色名稱定義。 Cluster Admin:管理整個集群。可創建、銷燬instance。阿里雲內部管理人員,權限不對外。 superuser:某個項目內的實例(instance)內的管理員,系統默認將實例申請賬號的擁有者設定為superuser。擁有整個實例的權限,可創建、銷燬DB,也可創建角色以及為角色授權等。 DB owner:某個DB的owner。系統默認superuser是DB的Owner,但superuser可授權給某個用戶,讓其成為DB Owner。 普通用戶:經過授權後,可在某個DB裡執行普通的SQL。需要更多的權限,需要向superuser申請。交互式分析數據類型介紹

阿里雲交互式分析與Presto對比分析及使用注意事項

上表為基本類型介紹。其中重點為double precision、text、timestamp with time zone以及date。

阿里雲交互式分析與Presto對比分析及使用注意事項

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為基礎簡單操作。需要注意的是:對於timestamp with time zone類型,SQL標準通過判斷timestamptz類型數據的“+”或者“-”符號以及符號後面的時區偏移來識別時區,如果未表明時區偏移,將會有一個默認時區添加到數據上。交互式分析支持precision的範圍從0到38,scale範圍支持從0到precision。交互式分析的decimal需要明確指定precision和scale信息,不能使用省略的方式。

阿里雲交互式分析與Presto對比分析及使用注意事項

數組類型包括int4[]、int8[]、float4[]、float8[]、boolean[]、text[]。上圖所示為插入數據和查詢數組類型的數據示例。

阿里雲交互式分析與Presto對比分析及使用注意事項

在插入數據時,例如,ARRAY可以使用ARRAY關鍵字,如上圖所示。

阿里雲交互式分析與Presto對比分析及使用注意事項

也可以使用{}表達式,如上圖所示。

阿里雲交互式分析與Presto對比分析及使用注意事項

查詢數組中單個元素,如上圖所示。

阿里雲交互式分析與Presto對比分析及使用注意事項

查詢數組中部分元素,如上圖所示。交互式分析實例對象層級介紹

阿里雲交互式分析與Presto對比分析及使用注意事項

交互式分析新增schema功能之後,表的存儲結構從database.table改變為database.schema.table。每一張表歸屬於一個schema,一個Database可以有多個schema。不同的schema下可以有相同的對象(表名、數據類型等)。 交互式分析當前版本主要支持create schema,alter schema rename以及在schema的建表功能。暫時不支持drop schema。交互式分析場景分類 交互式分析場景分為MaxCompute直接分析使用場景和MaxCompute導入查詢使用場景。MaxCompute直接分析使用場景作為首選方案,查詢數據量小於100GB(經過分區過濾後,命中分區的大小,與查詢相關字段的大小無關)。MaxCompute導入查詢使用場景指單表查詢數據量大於100GB、複雜查詢、含索引的查詢、數據需更新、insert操作的場景。針對MaxCompute直接分析使用場景,MaxCompute非分區表數據查詢過程如下:

阿里雲交互式分析與Presto對比分析及使用注意事項

首先在MaxCompute中創建非分區表。

阿里雲交互式分析與Presto對比分析及使用注意事項

然後建立交互式分析與MaxCompute的映射表。針對MaxCompute直接分析使用場景,MaxCompute分區表數據直接查詢過程如下:

阿里雲交互式分析與Presto對比分析及使用注意事項

首先在MaxCompute中創建分區表。

阿里雲交互式分析與Presto對比分析及使用注意事項

然後建立交互式分析與MaxCompute的映射表。針對MaxCompute導入查詢使用場景,MaxCompute非分區數據導入查詢過程如下:

阿里雲交互式分析與Presto對比分析及使用注意事項

首先在MaxCompute中創建非分區表並插入數據。

阿里雲交互式分析與Presto對比分析及使用注意事項

然後建立交互式分析與MaxCompute的映射表。

阿里雲交互式分析與Presto對比分析及使用注意事項

在交互式分析中創建真實存在的表。

阿里雲交互式分析與Presto對比分析及使用注意事項

最後,將MaxCompute源頭表中的數據導入到交互式分析。針對MaxCompute導入查詢使用場景,MaxCompute分區數據導入查詢過程如下:

阿里雲交互式分析與Presto對比分析及使用注意事項

首先在MaxCompute中創建非分區表並插入數據。

阿里雲交互式分析與Presto對比分析及使用注意事項

然後建立交互式查詢與MaxCompute的映射表。

阿里雲交互式分析與Presto對比分析及使用注意事項

在交互式分析中創建真實存在的表。

阿里雲交互式分析與Presto對比分析及使用注意事項

在交互式分析中建立子分區。

阿里雲交互式分析與Presto對比分析及使用注意事項

最後,將MaxCompute中的數據導入交互式分析的子分區表。表的特徵設置

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為orientation的設置,在交互式分析(Interactive Analytics)中,數據庫表默認為列存(column store)形式。列存對於OLAP場景較好,適合各種複雜查詢,行存對於kv場景較好,適合基於primary key的點查和掃描scan。

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為clustering key的設置,互式分析(Interactive Analytics)會在聚簇索引上對數據進行排序,建立聚簇索引能夠加速用戶在索引列上的range和filter查詢。clustering_key指定的列必須滿足非空約束(not null)。clustering_key指定列時,可在列名後添加 :desc或者asc來表明構建索引時的排序方式。排序方式默認為asc,即升序。數據類型為float或double的列,不能設置為clustering_key。

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為bitmap columns的設置,bitmap_columns指定比特編碼列,交互式分析(Interactive Analytics)在這些列上構建比特編碼。bitmap可以對segment內部的數據進行快速過濾,所以建議用戶把filter條件的數據建成比特編碼。設置bitmap_columns要求orientation為 column,即列存表。bitmap_columns適合無序且取值不多的列,對於每個取值構造一個二進制串,表示取值所在位置的bitmap。bitmap_columns指定的列可以為null。默認所有text列都會被隱式地設置到bitmap_columns中。

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為dictionary encoding columns的設置,dictionary_encoding_columns指定字典編碼列,交互式分析(Interactive Analytics)為指定列的值構建字典映射。字典編碼可以將字符串的比較轉成數字的比較,加速group by、filter等查詢。設置dictionary_encoding_columns要求orientation為column,即列存表。dictionary_encoding_columns指定的列可以為null。無序但取值較少的列適合設置dictionary_encoding_columns,可以壓縮存儲。默認所有text列都會被隱式地設置到dictionary_encoding_columns中。

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為time to live in seconds的設置,time_to_live_in_seconds指定了表的生存時間,單位為秒,必須是非負數字類型,整數或浮點數均可。

阿里雲交互式分析與Presto對比分析及使用注意事項

上圖所示為distribution_key的設置,distribution_key屬性指定了數據庫表分佈策略。columnName部分如設置單值,不要有多餘空格。如設置多值,則以逗號分隔,同樣不要有多餘的空格。distribution_key指定的列可以為null。交互式分析中,數據庫表默認為隨機分佈形式。數據將被隨機分配到各個shard上。如果制定了分佈列,數據將按照指定列,將數據shuffle到各個shard,同樣的數值肯定會在同樣的shard中。當以分佈列做過濾條件時,交互式分析可以直接篩選出數據相關的shard進行掃描。當以分佈列做join條件時,交互式分析不需要再次將數據shuffle到其他計算節點,直接在本節點join本節點數據即可,可以大大提高執行效率。 交互式分析開發實例購買交互式分析實例如下所示:

阿里雲交互式分析與Presto對比分析及使用注意事項

點擊鏈接,進入購買實例界面,選擇對應的交互式分析region,公測階段主要是華東1、華東2、華北2、華南1,然後選擇購買的計算資源,並對實例命名,選擇購買時長,最後點擊購買。

阿里雲交互式分析與Presto對比分析及使用注意事項

確認交互式分析的地域,計算資源,以及設置的實例名稱,最後點擊去支付。查看交互式分析實例如下所示:

阿里雲交互式分析與Presto對比分析及使用注意事項

進入控制檯點擊DataWorks,選擇左側列表中的計算引擎列表,選擇交互式分析,查看當前購買交互式分析實例。創建項目空間如下所示:

阿里雲交互式分析與Presto對比分析及使用注意事項

選擇左側列表中的工作空間列表,並點擊頁面的創建工作空間。

阿里雲交互式分析與Presto對比分析及使用注意事項

填寫相應的工作空間名稱,顯示名,以及模式選擇。

阿里雲交互式分析與Presto對比分析及使用注意事項

選擇引擎為交互式分析,點擊下一步。 創建工作空間如下所示:

阿里雲交互式分析與Presto對比分析及使用注意事項

選擇實例顯示名稱以及選擇交互式分析實例名稱,數據庫名默認為postgres。添加子賬戶到到該項目空間如下所示:

阿里雲交互式分析與Presto對比分析及使用注意事項

選擇新建的項目空間點工作空間配置,選擇左側列表中的成員管理將需要添加到該項目空間的子賬戶添加到該項目空間。交互式分析開發如下所示:

阿里雲交互式分析與Presto對比分析及使用注意事項

進入Dataworks界面,點擊該交互式分析的項目空間,點擊左側的全部產品,選擇Holo Studio,進行開發。

阿里雲交互式分析與Presto對比分析及使用注意事項

創建新的文件夾,並創建節點名稱,默認數據庫為postgres。

阿里雲交互式分析與Presto對比分析及使用注意事項

進入Holo Studio點擊新建文件夾,創建交互式分析的節點,在此創建新的數據庫為git_database。

阿里雲交互式分析與Presto對比分析及使用注意事項

點擊右上角的配置按鈕,進入工作空間管理,進入管理界面。實例開通成功後,系統會默認生成一個名為postgres的數據庫,但該數據庫分配的資源小,若需要走生產任務,建議創建一個新的業務數據庫。

阿里雲交互式分析與Presto對比分析及使用注意事項

進入工作空間配置,點擊計算引擎信息中的的交互式分析,可以查看到交互式分析實例的相關信息,在這裡點擊綁定交互式分析DB。

阿里雲交互式分析與Presto對比分析及使用注意事項

點擊綁定交互式分析按鈕,填寫在Holo Studio中的創建的數據庫git_database,然後點擊測試聯通性,點擊確定。交互式分析子賬戶授權如下所示:

阿里雲交互式分析與Presto對比分析及使用注意事項

使用主賬號登錄控制檯,點右側人像,點擊訪問控制,查看當前所有用戶。

阿里雲交互式分析與Presto對比分析及使用注意事項

選擇左側列表中的用戶管理需要添加到Holo Studio的用戶,並點擊。

阿里雲交互式分析與Presto對比分析及使用注意事項

點擊用戶名稱,可以查看到用戶的基本信息,在UID字段中可以看到一串數字,將這UID記錄下來。

阿里雲交互式分析與Presto對比分析及使用注意事項

進入所開發的Holo Studio的界面,在所建立的文件夾下,點擊Holo節點,輸入圖片中的語句create user “p4_” SUPERUSER,這裡的UID即是上頁保存的UID。 阿里雲交互式分析與Presto的區別總之,阿里雲交互式分析的適用場景為實時數倉和聯邦查詢(MaxCompute、Mysql、OSS…),實例架構對應飛天操作系統(內存+存儲混合型),操作方式為HoloStudio界面開發,也支持其他bi工具,並且兼容Postgres。數據模型層級分為Instance、database、schema和table。權限控制為簡單或複雜模型+Grant語句。數據類型支持複雜類型,支持表屬性設置。SQL為Postgres SQL,支持數據存儲,可以實時寫入、實時更新。生態(BI工具)為Tableau、帆軟主流BI+雲QuickBI。 而Presto的適用場景為聯邦查詢(Hive、Mysql、MongoDB…)。實例架構對應Presto架構(MPP),操作方式為客戶端操作。數據模型層級分為Catalog、Schema和Table。權限控制為Grant語句,數據類型支持複雜類型,不支持表屬性設置,SQL是Presto SQL,不支持數據存儲,不支持數據更新,生態(BI工具)為Tableau、帆軟等主流BI。


分享到:


相關文章: