Clickhouse
clickhouse是一款列式存储数据库。
主要应用于OLAP领域。
OLAP:联机分析处理,主要做数据分析。
OLTP:联机事务处理,主要处理事务。
clickhouse索引和分区:
clickhouse可以进行分区操作,对海量数据进行细粒度的管理。
clickhouse支持索引操作,但是是稀疏索引,默认间隔8192.
clickhouse应用领域:
clickhouse单表查询,效率非常高;但是一旦多表联查,效率就没有那么高。适用于单表操作。
clickhouse数据类型:
整型:支持的整型分为两种:一种是有符号,一种是无符号。
ReplacingMergeTree引擎:
新版本,存储数据默认就会进行分区之内去重,但是分区之间不去重,直到后台进行去重,或是通过optimize手动去重。
SummingMergeTree:
新版本,存储数据默认就会进行分区之内预聚合,但是分区之间不进行预聚合,直到后台进行预聚合,或是通过optimize手动让其预聚合。
foreach和foreachPartition的区别?哪个效率高
foreachPartition效率高。
举例:将1w条数据,分成5个分区,平均每个分区2000条数据,要将这1w条数据保存到数据库,如果调用foreach,一次保存一条:
每来1条数据,就要打开数据库连接,然后保存这1条数据,保存成功后,断开数据库连接,以此类推,如果要保存1w条数据,就要
打开断开1w次数据库,这样的话给数据库造成的压力比较大。
如果调用foreachPartition,一次操作一个分区当中的数据,也就是如果只有5个分区,那么每个分区进行保存,会打开断开一次数据库连接,一共5个分区,只需要打开断开5次数据库就能完成,给数据库造成的压力比较小,效率比较高。
clickhouse数学函数:
rand/rand32/rand64:返回一个UInt32/UInt64类型的随机数字,所有随机产生的数字出现的概率相同。
floor(x):小于等于x中的最大整数。
ceil(x):大于等于x中的最小整数。
clickhouse条件函数:
if:条件判断。
ifNull(x,default):条件判断,如果第一个参数x不为空,则返回x;如果x为Null,则返回默认值default。
isNull(x):检查参数是否为Null,x为一个非复合类型的值,如果x为Null则返回1,如果x不为Null则返回0.
isNotNull(x):和isNull相反。
clickhouse类型函数:
toInt(8|16|32|64),toFloat(32|64),toString,toDate
clickhouse日期函数:
now():返回当前日期和时间。
today():返回当天的日期。
yesterday():返回昨天日期。
toYYYYMM:格式化到年月。
toYYYYMMDD:格式化到年月日。
toYYYYMMDDhhmmss:格式化到年月日,时分秒。
toYear/toQuarter/toMonth/toDayOfYear/toDayOfMonth/toDayOfWeek/toHour
toUnixTimeStamp():将时间转换为毫秒统计。
toStartOfYear:年的第一天。
toStartOfQuarter:季度的第一天。
addMonths():添加月。
addWeeks():添加周。
addDays():添加天。
addHours|addMinutes|addSeconds|addQuarters
subtractQuarters():缩减季度。
subtractDays():缩减天数。
clickhouse字符串函数:
length():统计长度。
empty:是否为空。
notEmpty:不为空。
lower|lcase|upper|ucase:大小写转换。
reverse():反转。
concat():拼接,将参数拼接到一起。