Array

简介: Array

数组有两种定义形式,常规方式 array(T)

$ SELECT array(1, 2) as a, toTypeName(a);
┌─a─────┬─toTypeName([1, 2])─┐
│ [1,2] │ Array(UInt8)       │
└───────┴────────────────────┘点击复制复制失败已复制


或者简写 [T]

$ SELECT [1, 2];
┌─[1, 2]─┐
│ [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
目录
相关文章
|
6月前
Array.from() 与 Array.reduce()
Array.from() 与 Array.reduce()
43 1
|
2月前
|
JavaScript 前端开发 索引
|
6月前
|
存储 机器学习/深度学习 JavaScript
array
array
35 2
|
6月前
实现array.slice()方法
实现array.slice()方法
|
索引
Array 数组
Array 数组
85 0
|
索引
Array.forEach()
Array.forEach()
83 0
|
人工智能 索引
Even Array
Even Array
131 0
Even Array
|
存储 索引
你真的用对 Array.map() 了吗
你真的用对 Array.map() 了吗
146 0
|
Java C# 索引
C# 数组(Array)
基础知识 声明数组 datatype[] arrayName; 初始化数组: 声明一个数组不会在内存中初始化数组。当初始化数组变量时,您可以赋值给数组。 数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。 例如: double[] balance = new double[10]; 您可以在声明数组的同时给数组赋值,比如: double[] balance = { 2340.0, 4523.69, 3421.0}; 您也可以创建并初始化一个数组,比如: int[] marks = new int[5] { 99, 98, 92, 97, 95}; 在上述情况下,你
217 0
|
索引
Srting&Array方法总结
String对象 //.length; => 字符串的长度 // .charAt(索引); => 返回对应字符 超出为空 // .
1013 0