日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3 array为什么不能放不同类型的数据_来自俄罗斯的凶猛彪悍的分析数据库ClickHouse...

發布時間:2023/12/2 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 array为什么不能放不同类型的数据_来自俄罗斯的凶猛彪悍的分析数据库ClickHouse... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍色字體,選擇“設為星標

回復”資源“獲取更多資源

大數據技術與架構點擊右側關注,大數據開發領域最強公眾號!

暴走大數據點擊右側關注,暴走大數據!

ClickHouse相關文章推薦:

戰斗民族開源 | ClickHouse萬億數據雙中心的設計與實踐你需要懂一點ClickHouse的基礎知識趣頭條實戰 | 基于Flink+ClickHouse構建實時數據平臺Prometheus+Clickhouse實現業務告警基于ClickHouse的用戶行為分析實踐

ClickHouse 是一款由俄羅斯Yandex公司開源的OLAP數據庫,擁有者卓越的性能表現,在官方公布的基準測試中,ClickHouse的平均響應速度是Vertica的2.63倍、InfiniDB的17倍、MonetDB的27倍、Hive的126倍、MySQL的429倍以及Greenplum的10倍。

自2016年開源以來,ClickHouse一直保持著飛速的發展,是目前業界公認的OLAP數據庫黑馬,已在頭條、阿里、騰訊、新浪、青云等眾多公司得以應用。

作為一款分析型數據庫,ClickHouse提供了許多數據類型,它們可以劃分為基礎類型、復合類型和特殊類型。其中基礎類型使ClickHouse具備了描述數據的基本能力,而另外兩種類型則使ClickHouse的數據表達能力更加豐富立體。

本文主要來談ClickHouse的復合類型,ClickHouse提供了數組、元組、枚舉和嵌套四類復合類型。這些類型通常是其他數據庫原生不具備的特性。擁有了復合類型之后,ClickHouse的數據模型表達能力更強了。

  • Array

  • 數組有兩種定義形式,常規方式array(T):

    SELECT array(1, 2) as a , toTypeName(a)

    ┌─a───┬─toTypeName(array(1, 2))─┐

    │ [1,2] │ Array(UInt8) ?????????????│

    └─────┴────────────────┘

    或者簡寫方式[T]:

    SELECT [1, 2]

    通過上述的例子可以發現,在查詢時并不需要主動聲明數組的元素類型。因為ClickHouse的數組擁有類型推斷的能力,推斷依據:以最小存儲代價為原則,即使用最小可表達的數據類型。例如在上面的例子中,array(1, 2)會通過自動推斷將UInt8作為數組類型。但是數組元素中如果存在Null值,則元素類型將變為Nullable,例如:


    ?SELECT [1, 2, null] as a , toTypeName(a)

    ┌─a──────┬─toTypeName([1, 2, NULL])─┐

    │ [1,2,NULL] │ Array(Nullable(UInt8)) ???│

    └────────┴─────────────────┘

    細心的讀者可能已經發現,在同一個數組內可以包含多種數據類型,例如數組[1, 2.0]是可行的。但各類型之間必須兼容,例如數組[1, '2']則會報錯。

    在定義表字段時,數組需要指定明確的元素類型,例如:

    CREATE TABLE Array_TEST (

    ????c1 Array(String)

    ) engine = Memory


    2. Tuple

    元組類型由1~n個元素組成,每個元素之間允許設置不同的數據類型,且彼此之間不要求兼容。元組同樣支持類型推斷,其推斷依據仍然以最小存儲代價為原則。與數組類似,元組也可以使用兩種方式定義,常規方式tuple(T):

    SELECT tuple(1,'a',now()) AS x, toTypeName(x)

    ┌─x─────────────────┬─toTypeName(tuple(1, 'a', now()))─┐

    │ (1,'a','2019-08-28 21:36:32') │ Tuple(UInt8, String, DateTime) ???│

    └───────────────────┴─────────────────────┘

    或者簡寫方式(T):

    SELECT (1,2.0,null) AS x, toTypeName(x)

    ┌─x──────┬─toTypeName(tuple(1, 2., NULL))───────┐

    │ (1,2,NULL) │ Tuple(UInt8, Float64, Nullable(Nothing)) │

    └───────┴──────────────────────────┘

    在定義表字段時,元組也需要指定明確的元素類型:

    CREATE TABLE Tuple_TEST (

    ????c1 Tuple(String,Int8)

    ) ENGINE = Memory;


    元素類型和泛型的作用類似,可以進一步保障數據質量。在數據寫入的過程中會進行類型檢查。例如,寫入INSERT INTO Tuple_TEST VALUES( ('abc' , 123) )是可行的,而寫入INSERT INTO Tuple_TEST VALUES( ('abc' , 'efg') )則會報錯。

    3. Enum

    ClickHouse支持枚舉類型,這是一種在定義常量時經常會使用的數據類型。ClickHouse提供了Enum8和Enum16兩種枚舉類型,它們除了取值范圍不同之外,別無二致。枚舉固定使用(String:Int) Key/Value鍵值對的形式定義數據,所以Enum8和Enum16分別會對應(String:Int8)和(String:Int16),例如:

    CREATE TABLE Enum_TEST (

    ????c1 Enum8('ready' = 1, 'start' = 2, 'success' = 3, 'error' = 4)

    ) ENGINE = Memory;

    在定義枚舉集合的時候,有幾點需要注意。首先,Key和Value是不允許重復的,要保證唯一性。其次,Key和Value的值都不能為Null,但Key允許是空字符串。在寫入枚舉數據的時候,只會用到Key字符串部分,例如:

    INSERT INTO Enum_TEST VALUES('ready');

    INSERT INTO Enum_TEST VALUES('start');


    數據在寫入的過程中,會對照枚舉集合項的內容逐一檢查。如果Key字符串不在集合范圍內則會拋出異常,比如執行下面的語句就會出錯:

    INSERT INTO Enum_TEST VALUES('stop');

    可能有人會覺得,完全可以使用String代替枚舉,為什么還需要專門的枚舉類型呢?這是出于性能的考慮。因為雖然枚舉定義中的Key屬于String類型,但是在后續對枚舉的所有操作中(包括排序、分組、去重、過濾等),會使用Int類型的Value值。

    4. Nested

    嵌套類型,顧名思義是一種嵌套表結構。一張數據表,可以定義任意多個嵌套類型字段,但每個字段的嵌套層級只支持一級,即嵌套表內不能繼續使用嵌套類型。對于簡單場景的層級關系或關聯關系,使用嵌套類型也是一種不錯的選擇。例如,下面的nested_test是一張模擬的員工表,它的所屬部門字段就使用了嵌套類型:

    CREATE TABLE nested_test (

    ????name String,

    ????age ?UInt8 ,

    ????dept Nested(

    ????????id UInt8,

    ????????name String

    ????)

    ) ENGINE = Memory;


    ClickHouse的嵌套類型和傳統的嵌套類型不相同,導致在初次接觸它的時候會讓人十分困惑。以上面這張表為例,如果按照它的字面意思來理解,會很容易理解成nested_test與dept 是一對一的包含關系,其實這是錯誤的。不信可以執行下面的語句,看看會是什么結果:

    INSERT INTO nested_test VALUES ('nauu',18, 10000, '研發部');

    Exception on client:

    Code: 53. DB::Exception: Type mismatch in IN or VALUES section. Expected: Array(UInt8). Got: UInt64


    注意上面的異常信息,它提示期望寫入的是一個Array數組類型。

    現在大家應該明白了,嵌套類型本質是一種多維數組的結構。嵌套表中的每個字段都是一個數組,并且行與行之間數組的長度無須對齊。所以需要把剛才的INSERT語句調整成下面的形式:

    INSERT INTO nested_test VALUES ('bruce' , 30 , [10000,10001,10002], ['研發部','技術支持中心','測試部']);

    --行與行之間,數組長度無須對齊

    INSERT INTO nested_test VALUES ('bruce' , 30 , [10000,10001], ['研發部','技術支持中心']);


    需要注意的是,在同一行數據內每個數組字段的長度必須相等。例如,在下面的示例中,由于行內數組字段的長度沒有對齊,所以會拋出異常:

    INSERT INTO nested_test VALUES ('bruce' , 30 , [10000,10001], ['研發部','技術支持中心',

    '測試部']);

    DB::Exception: Elements 'dept.id' and 'dept.name' of Nested data structure 'dept' (Array columns) have different array sizes..

    在訪問嵌套類型的數據時需要使用點符號,例如:


    SELECT name, dept.id, dept.name FROM nested_test

    ┌─name─┬─dept.id──┬─dept.name─────────────┐

    │ bruce │ [16,17,18] │ ['研發部','技術支持中心','測試部'] │

    └────┴───────┴────────────────────┘


    關于作者:

    朱凱,ClickHouse貢獻者之一,ClickHouse布道者,資深架構師,十多年IT從業經驗,對大數據領域主流技術與解決方案有深入研究,擅長分布式系統的架構設計與整合。曾主導過多款大數據平臺級產品的規劃、設計與研發工作,一線實戰經驗豐富。現就職于遠光軟件股份有限公司,任大數據事業部平臺開發部總經理。著有《企業級大數據平臺構建:架構與實現》?《ClickHouse原理解析與應用實踐》等書。

    國內首本全方位講解ClickHouse的技術書,這是一本可幫助讀者深度理解并全面掌握ClickHouse運行原理并進行實踐開發的工具書,涵蓋了ClickHouse的時代背景、發展歷程、核心概念、基礎功能、運行原理、實踐指導等多個維度的內容。一本書幫你駕馭ClickHouse。

    版權聲明:

    本文為大數據技術與架構整理,原作者獨家授權。未經原作者允許轉載追究侵權責任。編輯|冷眼丶微信公眾號|import_bigdata歡迎點贊+收藏+轉發朋友圈素質三連

    文章不錯?點個【在看】吧!??

    總結

    以上是生活随笔為你收集整理的python3 array为什么不能放不同类型的数据_来自俄罗斯的凶猛彪悍的分析数据库ClickHouse...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 美女福利在线视频 | 欧美在线一级片 | 在线视频天堂 | 尤物视频在线观看视频 | 少妇太爽了 | 好吊妞操| www.av麻豆| 国产区二区 | 日本精品一区 | 国产精品午夜未成人免费观看 | 天天影视亚洲 | 日本一区二区免费高清视频 | 少妇粉嫩小泬喷水视频www | 国产精品国产三级国产普通话对白 | 日本福利小视频 | 蘑菇av | 日本熟妇一区二区三区 | 欧美日韩电影一区二区 | 无码人妻久久一区二区三区 | 韩日产理伦片在线观看 | 国产精品天天av精麻传媒 | ass精品国模裸体欣赏pics | 亚洲精品乱码久久久久久自慰 | 深夜福利网 | 成人做受黄大片 | 中文字幕电影一区 | 黄色的网站免费看 | 女女互慰吃奶互揉调教捆绑 | 中文字幕av无码一区二区三区 | 青青伊人国产 | 插少妇视频| 成人试看120秒体验区 | 国产男女精品 | 成人免费毛片网 | 国产精品国产三级国产aⅴ9色 | 国产精品偷伦视频免费看 | aaaa视频 | va在线播放 | 久久久久久久久久久久 | 狠狠干女人 | 91精品久久久久久久久久入口 | 国产乱色精品成人免费视频 | 人妻丰满熟妇av无码区 | 一本一道av | 欧美成人国产va精品日本一级 | 福利视频精品 | 中文字幕av资源 | 爆乳熟妇一区二区三区 | 国产伦理一区 | 天天操天天干天天操 | 4虎最新网址 | 日韩在线不卡 | 人人人妻人人澡人人爽欧美一区 | 青青操影院 | 人人妻人人澡人人爽精品日本 | 亚洲无码精品在线播放 | 国产精品乱码一区 | 99亚洲欲妇| 欧美国产91| 久草福利资源 | 亚洲一区二区三区无码久久 | 一级黄色录像免费观看 | 爆操老女人 | 日韩在线视频观看免费 | 亚洲一区免费在线观看 | 黄网免费在线观看 | 国产精品久久久久久久久免费 | 国产日韩在线一区 | 性感美女在线观看 | caopor在线视频| 天天干天天操天天插 | 日日操夜夜 | 日本猛少妇色xxxxx猛叫 | 麻豆爱爱视频 | 精品乱码一区内射人妻无码 | 一区二区三区入口 | 国产激情无码一区二区 | 香蕉大人久久国产成人av | 欧美比基尼 | 最新国产视频 | 国产一级α片 | 成人免费网视频 | 色婷婷久久久 | 国产a视频免费观看 | 色人阁五月 | 日韩黄色影视 | 男人的天堂成人 | 亚洲精华国产精华精华液网站 | 国产欧美一区二区三区视频在线观看 | 亚洲理论片在线观看 | 在哪里可以看毛片 | 青青草免费公开视频 | 久久精品专区 | 欧美一区二区三区成人片在线 | 欧美v日本 | 久久久久性 | 日韩v片 | 天天干夜夜做 | 一区二区三区有限公司 |