官网网站建设研究域名暂无法进行网站备案

news/2025/9/22 19:56:49/文章来源:
官网网站建设研究,域名暂无法进行网站备案,做英语网站,最好网站开发公司电话文章标题 一、WITH语法-定义变量1.1 定义变量1.2 调用函数1.3 子查询 二、GROUP BY子句#xff08;结合WITH ROLLUP、CUBE、TOTALS#xff09;三、FORM语法3.1表函数3.1.1 file3.1.2 numbers3.1.3 mysql3.1.4 hdfs 四、ARRAY JOIN语法#xff08;区别于arrayJoin(arr)函数结合WITH ROLLUP、CUBE、TOTALS三、FORM语法3.1表函数3.1.1 file3.1.2 numbers3.1.3 mysql3.1.4 hdfs 四、ARRAY JOIN语法区别于arrayJoin(arr)函数五、连续销售案例六、连接函数6.1 连接精度6.1.1 ALL6.1.2 ANY6.1.3 ASOF 七、系统函数介绍八、JSON解析案例九、实用函数十、语法注意事项 背景基于初次接触数据分析对ck函数的不熟悉此文章主要基于ck特有的sql语法来做讲解 官网https://clickhouse.tech/docs/zh 一、WITH语法-定义变量 ClickHouse支持CTECommon Table Expression,公共表达式以增强查询语句的表达 SELECT pow(2, 2);┌─pow(2, 2)─┐ │ 4 │ └───────────┘SELECT pow(pow(2, 2), 2);┌─pow(pow(2, 2), 2)─┐ │ 16 │ └───────────────────┘在改用CTE的形式后可以极大地提高语句的可读性和维护性。 WITHpow(2, 2) AS a SELECT pow(a, 2);┌─pow(a, 2)─┐ │ 16 │ └───────────┘1.1 定义变量 可以定义变量这些变量能够在后续的查询子句中被直接访问。 # tb_mysql- 创建数据 DROP TABLE IF EXISTS tb_mysql; CREATE TABLE tb_mysql (id UInt8,name String,age UInt8 )ENGINE MergeTree() ORDER BY id; INSERT INTO tb_mysql VALUES (1, tom, 23); INSERT INTO tb_mysql VALUES (2, lisa, 33); INSERT INTO tb_mysql VALUES (3, henry, 44); INSERT INTO tb_mysql VALUES (1, linda, 23); INSERT INTO tb_mysql VALUES (2, ross, 33); INSERT INTO tb_mysql VALUES (1, julie, 23); INSERT INTO tb_mysql VALUES (2, niki, 33);# 数据分析 WITH 1 AS constant SELECTid constant,name FROMtb_mysql;┌─plus(id, constant)─┬─name─┐ │ 3 │ niki │ └────────────────────┴──────┘ ┌─plus(id, constant)─┬─name──┐ │ 2 │ tom │ │ 2 │ linda │ │ 2 │ julie │ │ 3 │ lisa │ │ 3 │ ross │ │ 4 │ henry │ └────────────────────┴───────┘1.2 调用函数 可以访问SELECT子句中的列字段并调用函数做进一步的加工处理 # tb_partition-创造数据 DROP TABLE IF EXISTS tb_partition; CREATE TABLE tb_partition (id UInt8,name String,birthday String )ENGINE MergeTree() ORDER BY id; INSERT INTO tb_partition VALUES (1, x1, 2024-05-20 10:50:46); INSERT INTO tb_partition VALUES (2, xy, 2024-05-20 11:17:47); INSERT INTO tb_partition VALUES (3, xf, 2024-05-19 11:11:12);# 数据分析 WITH toDate(birthday) AS bday SELECTid,name,bday FROMtb_partition;┌─id─┬─name─┬───────bday─┐ │ 1 │ x1 │ 2024-05-20 │ └────┴──────┴────────────┘ ┌─id─┬─name─┬───────bday─┐ │ 2 │ xy │ 2024-05-20 │ └────┴──────┴────────────┘ ┌─id─┬─name─┬───────bday─┐ │ 3 │ xf │ 2024-05-19 │ └────┴──────┴────────────┘1.3 子查询 可以定义子查询在WITH中使用子查询时有一点需要特别注意该查询语句只能 返回一行数据如果结果集的数据大于一行则会抛出异常 WITH (SELECT *FROM tb_partitionWHERE tb_partition.id 1) AS sub SELECT* ,sub FROM tb_partition;┌─id─┬─name─┬─birthday────────────┬─sub────────────────────────────┐ │ 3 │ xf │ 2024-05-19 11:11:12 │ (1,x1,2024-05-20 10:50:46) │ └────┴──────┴─────────────────────┴────────────────────────────────┘ ┌─id─┬─name─┬─birthday────────────┬─sub────────────────────────────┐ │ 2 │ xy │ 2024-05-20 11:17:47 │ (1,x1,2024-05-20 10:50:46) │ └────┴──────┴─────────────────────┴────────────────────────────────┘ ┌─id─┬─name─┬─birthday────────────┬─sub────────────────────────────┐ │ 1 │ x1 │ 2024-05-20 10:50:46 │ (1,x1,2024-05-20 10:50:46) │ └────┴──────┴─────────────────────┴────────────────────────────────┘二、GROUP BY子句结合WITH ROLLUP、CUBE、TOTALS ROLLUP能够按照聚合键从右向左上卷数据基于聚 合函数依次生成分组小计和总计。如果设聚合键的个数为n则最终 会生成小计的个数为n1CUBE像立方体模型一样基于聚合键之间所有的 组合生成小计信息。如果设聚合键的个数为n则最终小计组合的个 数为2的n次方。接下来用示例说明它的用法TOTALS会基于聚合函数对所有数据进行总计 # tb_with-创建数据 DROP TABLE IF EXISTS tb_with; CREATE TABLE tb_with (id UInt8,vist UInt8,province String,city String,area String )ENGINE MergeTree() ORDER BY id; INSERT INTO tb_with VALUES (1, 12 ,湖北, 黄冈, 武穴); INSERT INTO tb_with VALUES (2, 12 ,湖北, 黄冈, 黄州); INSERT INTO tb_with VALUES (3, 12 ,湖北, 黄冈, 麻城); INSERT INTO tb_with VALUES (4, 32 ,湖北, 黄冈, 黄梅); INSERT INTO tb_with VALUES (5, 12 ,湖北, 黄石, 下陆); INSERT INTO tb_with VALUES (6, 54 ,湖北, 黄石, 铁山); INSERT INTO tb_with VALUES (7, 12 ,湖北, 黄石, 石灰窑); INSERT INTO tb_with VALUES (8, 89 ,湖北, 荆州, 荆门); INSERT INTO tb_with VALUES (9, 99 ,湖北, 荆州, 钟祥);# 数据分析 SELECT province,city,area,sum(vist) AS total_visit FROM tb_with GROUP BY province, city, area WITH ROLLUP ;┌─province─┬─city─┬─area───┬─total_visit─┐ │ 湖北 │ 黄冈 │ 黄梅 │ 32 │ │ 湖北 │ 荆州 │ 钟祥 │ 99 │ │ 湖北 │ 黄冈 │ 麻城 │ 12 │ │ 湖北 │ 荆州 │ 荆门 │ 89 │ │ 湖北 │ 黄冈 │ 黄州 │ 12 │ │ 湖北 │ 黄石 │ 下陆 │ 12 │ │ 湖北 │ 黄石 │ 石灰窑 │ 12 │ │ 湖北 │ 黄石 │ 铁山 │ 54 │ │ 湖北 │ 黄冈 │ 武穴 │ 12 │ └──────────┴──────┴────────┴─────────────┘ ┌─province─┬─city─┬─area─┬─total_visit─┐ │ 湖北 │ 黄石 │ │ 78 │ │ 湖北 │ 荆州 │ │ 188 │ │ 湖北 │ 黄冈 │ │ 68 │ └──────────┴──────┴──────┴─────────────┘ ┌─province─┬─city─┬─area─┬─total_visit─┐ │ 湖北 │ │ │ 334 │ └──────────┴──────┴──────┴─────────────┘ ┌─province─┬─city─┬─area─┬─total_visit─┐ │ │ │ │ 334 │ └──────────┴──────┴──────┴─────────────┘三、FORM语法 SQL是一种面向集合的编程语言from决定了程序从那里读取数据 表中查询数据子查询中查询数据表函数中查询数据 select * from numbers3 3.1表函数 构建表的函数使用场景如下 SELECT查询的FROM子句 创建表 AS 查询 3.1.1 file -- 数据文件必须在指定的目录下 /var/lib/clickhouse/user_filesSELECT * FROM file(demo.csv, CSV, id Int8,name String, age UInt8) -- 文件夹下任意的文件 SELECT* FROM file(*, CSV, id Int8, name String, age UInt8)3.1.2 numbers -- numbers(N) – 返回一个包含单个 ‘number’ 列(UInt64)的表其中包含从0到N-1的整数。 -- numbers(N, M) - 返回一个包含单个 ‘number’ 列(UInt64)的表其中包含从N到(NM-1)的整数。 SELECT * FROM numbers(10);SELECT * FROM numbers(2, 10);SELECT * FROM numbers(2, 10) LIMIT 3;SELECT toDate(2020-01-01) number AS d FROM numbers(365);3.1.3 mysql -- CH可以直接从mysql服务中查询数据 mysql(host:port, database, table, user, password[, replace_query, on_duplicate_clause]);SELECT* FROM mysql(linux01:3306, db_doit_ch, emp, root, root);3.1.4 hdfs SELECT * FROMhdfs(hdfs://hdfs1:9000/test, TSV, column1 UInt32, column2 UInt32) LIMIT 2;SELECT* FROMhdfs(hdfs://linux01:8020/demo.csv, CSV, id Int8, name String, age Int8)四、ARRAY JOIN语法区别于arrayJoin(arr)函数 ARRAY JOIN子句允许在数据表的内部与数组或嵌套类型的字段进行JOIN操作从而将一行数组展开为多行类似于hive中的explode炸裂函数的功能 # ARRAY JOIN-创建数据 DROP TABLE IF EXISTS tb_array_join; CREATE TABLE tb_array_join (id Int8,hobby Array(String) )ENGINE Log;INSERT INTO tb_array_join VALUES (1, [eat, drink, sleep]), (2, [study, sport, read]), (2, [study, sport]);# 查询数据 SELECT * FROM tb_array_join; ┌─id─┬─hobby────────────────────┐ │ 1 │ [eat,drink,sleep] │ │ 2 │ [study,sport,read] │ │ 2 │ [study,sport] │ └────┴──────────────────────────┘# 分析1 SELECTid,hobby,hobby_expand FROMtb_array_join ARRAY JOIN hobby AS hobby_expand; ┌─id─┬─hobby────────────────────┬─hobby_expand─┐ │ 1 │ [eat,drink,sleep] │ eat │ │ 1 │ [eat,drink,sleep] │ drink │ │ 1 │ [eat,drink,sleep] │ sleep │ │ 2 │ [study,sport,read] │ study │ │ 2 │ [study,sport,read] │ sport │ │ 2 │ [study,sport,read] │ read │ │ 2 │ [study,sport] │ study │ │ 2 │ [study,sport] │ sport │ └────┴──────────────────────────┴──────────────┘# 分析2 SELECTid,hobby,arrayEnumerate(hobby) AS indexs FROMtb_array_join; ┌─id─┬─hobby────────────────────┬─indexs──┐ │ 1 │ [eat,drink,sleep] │ [1,2,3] │ │ 2 │ [study,sport,read] │ [1,2,3] │ │ 2 │ [study,sport] │ [1,2] │ └────┴──────────────────────────┴─────────┘# 分析3将hobby展开并与索引组成一列 SELECTid,hobby_expand,index FROMtb_array_join ARRAY JOIN hobby AS hobby_expand, arrayEnumerate(hobby) AS index;┌─id─┬─hobby_expand─┬─index─┐ │ 1 │ eat │ 1 │ │ 1 │ drink │ 2 │ │ 1 │ sleep │ 3 │ │ 2 │ study │ 1 │ │ 2 │ sport │ 2 │ │ 2 │ read │ 3 │ │ 2 │ study │ 1 │ │ 2 │ sport │ 2 │ └────┴──────────────┴───────┘五、连续销售案例 需求对如下样本数据求每个店铺最高连续n天的销售情况 # tb_shop-创建数据 # 思路 # 1、按照name和cdate排序 # 2、对name和cdate相同的数据只保留一个按此业务所以保留每天最大的营销额 # 基于上述需求所以用ReplacingMergeTree引擎实现 # 3、然后基于下方的分析步骤进行逐步分析 DROP TABLE IF EXISTS tb_shop; CREATE TABLE tb_shop (name String,cdate Date,cost Float64 )ENGINE ReplacingMergeTree() ORDER BY (name, cdate); INSERT INTO tb_shop VALUES (a, 2024-02-05, 200), (a, 2024-02-04, 320), (a, 2024-02-03, 260), (a, 2024-01-29, 300), (a, 2024-01-29, 230), (a, 2024-01-28, 880), (a, 2024-01-27, 900), (a, 2024-01-26, 350), (a, 2024-01-26, 500), (a, 2024-01-26, 900),(b, 2024-02-05, 200), (b, 2024-02-04, 320), (b, 2024-02-03, 260), (b, 2024-02-02, 670),(c, 2024-02-05, 200), (c, 2024-02-05, 900), (c, 2024-02-05, 800), (c, 2024-02-05, 200);# 按照以下sql一步步排查 # 分析1 SELECT name,groupArray(cdate) AS arr FROMtb_shop GROUP BY name; ┌─name─┬─arr──────────────────────────────────────────────────────────────────────────────────────────┐ │ b │ [2024-02-02,2024-02-03,2024-02-04,2024-02-05] │ │ c │ [2024-02-05] │ │ a │ [2024-01-26,2024-01-27,2024-01-28,2024-01-29,2024-02-03,2024-02-04,2024-02-05] │ └──────┴──────────────────────────────────────────────────────────────────────────────────────────────┘# 分析2 SELECTname,ct,arr_index FROM(SELECTname,groupArray(cdate) AS arr,arrayEnumerate(arr) AS idxFROMtb_shopGROUP BY name) ARRAY JOIN arr AS ct, idx AS arr_index; ┌─name─┬─────────ct─┬─arr_index─┐ │ b │ 2024-02-02 │ 1 │ │ b │ 2024-02-03 │ 2 │ │ b │ 2024-02-04 │ 3 │ │ b │ 2024-02-05 │ 4 │ │ c │ 2024-02-05 │ 1 │ │ a │ 2024-01-26 │ 1 │ │ a │ 2024-01-27 │ 2 │ │ a │ 2024-01-28 │ 3 │ │ a │ 2024-01-29 │ 4 │ │ a │ 2024-02-03 │ 5 │ │ a │ 2024-02-04 │ 6 │ │ a │ 2024-02-05 │ 7 │ └──────┴────────────┴───────────┘# 分析3 SELECTname,(ct - arr_index) AS diff FROM(SELECTname,groupArray(cdate) AS arr,arrayEnumerate(arr) AS idxFROMtb_shopGROUP BY name) ARRAY JOIN arr AS ct, idx AS arr_index; ┌─name─┬───────diff─┐ │ b │ 2024-02-01 │ │ b │ 2024-02-01 │ │ b │ 2024-02-01 │ │ b │ 2024-02-01 │ │ c │ 2024-02-04 │ │ a │ 2024-01-25 │ │ a │ 2024-01-25 │ │ a │ 2024-01-25 │ │ a │ 2024-01-25 │ │ a │ 2024-01-29 │ │ a │ 2024-01-29 │ │ a │ 2024-01-29 │ └──────┴────────────┘# 分析4 SELECTname,(ct - arr_index) AS diff,count(1) FROM(SELECTname,groupArray(cdate) AS arr,arrayEnumerate(arr) AS idxFROMtb_shopGROUP BY name) ARRAY JOIN arr AS ct, idx AS arr_index GROUP BY name, diff; ┌─name─┬───────diff─┬─count()─┐ │ c │ 2024-02-04 │ 1 │ │ a │ 2024-01-25 │ 4 │ │ b │ 2024-02-01 │ 4 │ │ a │ 2024-01-29 │ 3 │ └──────┴────────────┴─────────┘ # 分析5 SELECTname,(ct - arr_index) AS diff,count(1) AS cc FROM(SELECTname,groupArray(cdate) AS arr,arrayEnumerate(arr) AS idxFROMtb_shopGROUP BY name) ARRAY JOIN arr AS ct, idx AS arr_index GROUP BY name, diff ORDER BY name, cc DESC; ┌─name─┬───────diff─┬─cc─┐ │ a │ 2024-01-25 │ 4 │ │ a │ 2024-01-29 │ 3 │ │ b │ 2024-02-01 │ 4 │ │ c │ 2024-02-04 │ 1 │ └──────┴────────────┴────┘# 分析6 SELECTname,(ct - arr_index) AS diff,count(1) AS cc FROM(SELECTname,groupArray(cdate) AS arr,arrayEnumerate(arr) AS idxFROMtb_shopGROUP BY name) ARRAY JOIN arr AS ct, idx AS arr_index GROUP BY name, diff ORDER BY name, cc DESC LIMIT 1 BY name; ┌─name─┬───────diff─┬─cc─┐ │ a │ 2024-01-25 │ 4 │ │ b │ 2024-02-01 │ 4 │ │ c │ 2024-02-04 │ 1 │ └──────┴────────────┴────┘六、连接函数 6.1 连接精度 连接精度决定了JOIN查询在连接数据时所使用的策略目前支持ALL、ANY和ASOF三种类型。如果不主动声明则默认是ALL。可以通过join_default_strictness配置参数修改默认的连接精度类型。对数据是否连接匹配的判断是通过JOIN KEY进行的目前只支持等式EQUAL JOIN。交叉连接CROSS JOIN不需要使用JOIN KEY因为它会产生笛卡尔积。 # 准备数据 DROP TABLE IF EXISTS yg; CREATE TABLE yg(id Int8,name String,age UInt8,bid Int8 )ENGINE Log; INSERT INTO yg VALUES(1, AA, 23, 1), (2, BB, 24, 3), (3, VV, 27, 1), (4, CC, 13, 3), (5, KK, 53, 3), (6, MM, 33, 3);DROP TABLE IF EXISTS bm; CREATE TABLE bm(bid Int8,name String )ENGINE Log; INSERT INTO bm VALUES(1, x),(2, Y),(3, z);DROP TABLE IF EXISTS gz; CREATE TABLE gz(id Int8,jb Int64,jj Int64 )ENGINE Log; INSERT INTO gz VALUES(1, 1000, 2000), (1, 1000, 2000),(2, 2000, 1233),(3, 2000, 3000),(4, 4000, 1000);6.1.1 ALL 如果左表内的一行数据在右表中有多行数据与之连接匹配则返回右表中全部连接的数据。而判断连接匹配的依据是左表与右表内的数据基于连接键JOIN KEY的取值完全相等equals等同于left.key right.key # 分析1 SELECT * FROMyg ALL INNER JOIN gz ON yg.id gz.id; ┌─id─┬─name─┬─age─┬─bid─┬─gz.id─┬───jb─┬───jj─┐ │ 1 │ AA │ 23 │ 1 │ 1 │ 1000 │ 2000 │ │ 1 │ AA │ 23 │ 1 │ 1 │ 1000 │ 2000 │ │ 2 │ BB │ 24 │ 3 │ 2 │ 2000 │ 1233 │ │ 3 │ VV │ 27 │ 1 │ 3 │ 2000 │ 3000 │ │ 4 │ CC │ 13 │ 3 │ 4 │ 4000 │ 1000 │ └────┴──────┴─────┴─────┴───────┴──────┴──────┘6.1.2 ANY 如果左表内的一行数据在右表中有多行数据与之连接匹配则返回右表中第一行连接的数据。ANY与ALL判断连接匹配的依据相同。 # 分析2 SELECT * FROMyg ANY INNER JOIN gz ON yg.id gz.id; ┌─id─┬─name─┬─age─┬─bid─┬─gz.id─┬───jb─┬───jj─┐ │ 1 │ AA │ 23 │ 1 │ 1 │ 1000 │ 2000 │ │ 2 │ BB │ 24 │ 3 │ 2 │ 2000 │ 1233 │ │ 3 │ VV │ 27 │ 1 │ 3 │ 2000 │ 3000 │ │ 4 │ CC │ 13 │ 3 │ 4 │ 4000 │ 1000 │ └────┴──────┴─────┴─────┴───────┴──────┴──────┘6.1.3 ASOF ASOF连接键之后追加定义一个模糊连接的匹配条件ASOF_COLUMN。 DROP TABLE IF EXISTS emp1; CREATE TABLE emp1(id Int8,name String,ctime DateTime )ENGINE Log; INSERT INTO emp1 VALUES(1, AA, 2021-01-03 00:00:00),(1, AA, 2021-01-02 00:00:00),(2, CC, 2021-01-01 00:00:00),(3, DD, 2021-01-01 00:00:00),(4, EE, 2021-01-01 00:00:00);DROP TABLE IF EXISTS emp2; CREATE TABLE emp2(id Int8,name String,ctime DateTime )ENGINE Log; INSERT INTO emp2 VALUES (1, aa, 2021-01-02 00:00:00),(1, aa, 2021-01-02 00:00:00),(2, cc, 2021-01-02 00:00:00),(3, dd, 2021-01-02 00:00:00);# 分析 SELECT * FROM emp1 ASOF INNER JOIN emp2 ON (emp1.id emp2.id) AND (emp1.ctime emp2.ctime); ┌─id─┬─name─┬───────────────ctime─┬─emp2.id─┬─emp2.name─┬──────────emp2.ctime─┐ │ 1 │ AA │ 2021-01-03 00:00:00 │ 1 │ aa │ 2021-01-02 00:00:00 │ └────┴──────┴─────────────────────┴─────────┴───────────┴─────────────────────┘七、系统函数介绍 ClickHouse主要提供两类函数-普通函数和聚合函数。普通函数由IFunction接口定义拥有数十种函数实现例如FunctionFormationDateTime、FunctionSubstring等。除了一些常见的函数诸如四则运算、日期转换等之外也不乏一些非常实用的函数例如网址提取函数、IP地址脱敏函数等。普通函数是没有状态的函数效果作用于每行数据之上。当然在函数具体执行的过程中并不会一行一行地运算而是采用向量化的方式直接作用于一整列数据。聚合函数由IAggregateFunction接口定义相比于无状态的普通函数聚合函数是有状态的。以COUNT聚合函数为例其AggregateFunctionCount的状态使用整UInt64记录。聚合函数的状态支持序列化与反序列话所以能够在分布式节点之间进行传输以实现增量计算。 普通函数 类型转换函数 日期函数 条件函数 数组函数 字符串函数 json解析函数 高阶函数聚合函数表函数 ps详情见官网 八、JSON解析案例 -- 建表 DROP TABLE IF EXISTS tb_ods_log; CREATE TABLE tb_ods_log (line String ) ENGINE Log;INSERT INTO tb_ods_log VALUES({account:14d9TM,deviceId:Kcjksekjg,ip:180.12.12.3,sessionId:sfjkeIGj,eventId:,properties:{adId:6,adCampain:7},timeStamp:18992891918}),({account:14d9TM,deviceId:Kcfafafkjg,ip:180.12.12.3,sessionId:sfjkeIGj,eventId:,properties:{adId:6,adCampain:7},timeStamp:189923891918}),({account:14faTM,deviceId:Kcfaekjg,ip:180.12.12.3,sessionId:sfjkeIGj,eventId:,properties:{adId:6,adCampain:5},timeStamp:189924891918});# json解析 WITH visitParamExtractString(line, account) as account,visitParamExtractString(line, deviceId) as deviceId,visitParamExtractString(line, sessionId) as sessionId,visitParamExtractRaw(line, properties) as properties,visitParamExtractInt(line, timeStamp) as timeStamp SELECTaccount,deviceId,sessionId,properties,timeStamp FROMtb_ods_log LIMIT 10;┌─account─┬─deviceId───┬─sessionId─┬─properties───────────────────┬────timeStamp─┐ │ 14d9TM │ Kcjksekjg │ sfjkeIGj │ {adId:6,adCampain:7} │ 18992891918 │ │ 14d9TM │ Kcfafafkjg │ sfjkeIGj │ {adId:6,adCampain:7} │ 189923891918 │ │ 14faTM │ Kcfaekjg │ sfjkeIGj │ {adId:6,adCampain:5} │ 189924891918 │ └─────────┴────────────┴───────────┴──────────────────────────────┴──────────────┘九、实用函数 在进行数据分析的时通常会设计到计算或者类型转换在进行此处理过程中会出现类型不兼容的情况而此时就可以通过toTypeName(name)函数来打印某一变量的类型进行排查。 SELECT1 AS b,toTypeName(b)┌─b─┬─toTypeName(1)─┐ │ 1 │ UInt8 │ └───┴───────────────┘十、语法注意事项 cklickhouse大小写敏感实现需求的时候可以先查找ck是否有函数可以支持如果不支持再去想其他方式 课件学习地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学做网站的视频教学深圳的设计网站公司

晚上我看到了JeffXie 写了一篇关于内存屏障的文章,后面又看到Linus对一次内存屏障修改的建议,所以就有了这篇文章。https://mp.weixin.qq.com/s/H7Pw8xCKcNu41UGaYB648w在我看来,内存屏障谁为了让计算机做更加正确的事情,不希望计…

wordpress首页默认文件夹如何刷seo关键词排名

Sora 使用教程,新手小白可用 参考文章:Sora 使用教程,OpenAI 的文生视频模型 为了在激烈的行业竞争中保持领先地位,OpenAI 在 2024 年 2 月 15 日发布了其革命性的文本至视频转换模型——Sora。这个先进的工具能够将文本描述转化…

乌海网站建设公司怎么管理网站数据库

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 参考内容 (1)文档《ARM汇编指令集汇总》 (2)文档《ARM汇编手册》 (3)文档《ARM Software Development Toolkit User Guide》 内容总结…

先网站开发后软件开发精准引流的网络推广

想着自己学习Javascript,以及Ajax、jQuery等已经有一段时间了,不过貌似还没有写过一个插件,看到jQuery官网上那么多令人眼前一亮的插件,自己今天也动心说是不是能够写一个类似的插件来瞧瞧,了解了jQuery插件的基本格式…

湖南禹班建设集团网站江苏省建设工程网站系统

1简介 1.1 目的 1.2 范围 2. 测试参考文档和测试提交文档 2.1 测试参考文档 2.2 测试提交文档 3. 测试策略 3.1整体测试策略 3.2功能测试 3.3 界面测试 3.4 性能测试 3.5 安全性测试 3.6 工具 4 测试阶段进入和退出标准 4.1进入标准 4.2退出标准 5 测试范围 5.1需要测试的模块 …

基于springboot的图书进销存管理系统 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

易路斩获招聘、薪酬两大重磅人力资源奖项,尽显行业领军风范!

9月16-17日,“ALL IN 2025人力资源服务展-上海站”圆满举办,同期智享会人力资源供应商价值大奖颁奖典礼盛大启幕。易路人力资源科技凭借卓越的专业服务能力、良好的品牌口碑以及广泛的市场影响力,成功斩获两项大奖—…

RAG系统嵌入模型怎么选?选型策略和踩坑指南

检索增强生成(RAG)已成为构建生成式 AI 应用的主流架构,企业选择它主要原本是可以用自有数据约束模型输出,使答案更准确、可更新且更贴合业务场景。RAG 的效果在很大程度上取决于检索到的上下文质量——提升效果的…

网站建设与管理试题答案怎么指导电脑有么有安装wordpress

问题 下游反馈使用 ffmpeg 切割后的音频文件,无法正确识别其声音的性别 排查流程 1,由于线上大部分用户上传音频后,进行切分后的音频都没问题,因此考虑到这些无法识别性别的音频,有格式问题,需要找出其共…

购物网站源代码wordpress 百万数据

Option Menu 是 Android 中一种常用的菜单方式,它通常用于在屏幕的顶部显示一个下拉菜单,提供一些常用的功能或操作选项。菜单里的菜单项默认不会显示出来,需要点击右上角三个点的菜单按钮。以下是一些使用 Option Menu 的基本步骤&#xff1…

网站运营方案案例建设网站对企业的重要性

目录 一.Java 基础面试题1.Java概述Java语言有哪些特点?Java和C有什么关系,它们有什么区别?JVM、JRE和JDK的关系是什么?**什么是字节码?**采用字节码的好处是什么?Oracle JDK 和 OpenJDK 的区别是什么? 2.基础语法Ja…

广州品牌网站建设 优美制作宣传图片的软件

目录 一、前言 二、SkyWalking告警功能介绍 2.1 SkyWalking告警是什么 2.2 为什么需要SkyWalking告警功能 2.2.1 及时发现系统异常 2.2.2 保障和提升系统稳定性 2.2.3 避免数据丢失 2.2.4 提高故障处理效率 三、 SkyWalking告警规则 3.1 SkyWalking告警规则配置 3.2 …

个人做淘宝客网站要备案天津网站建设电焊机

Blazor 是一个 Web UI 框架,可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程,它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术,但它使用 C#语言和 Razor 语法代替 JavaScrip…

免费的小网站南山网络科技有限公司

正常情况下hosts文件在目录C:\Windows\System32\drivers\etc中,最近新装的Windows10系统发现该目录下没有hosts文件。 如下操作显示隐藏文件发现还是没有。 执行如下命令hosts文件出现: for /f %P in (dir %windir%\WinSxS\hosts /b /s) do copy %P …

手机网站布局建设工程项目管理规范

枚举(Enumeration) 是一种特殊的数据类型,它允许你为一组相关的值定义名称。在编程中,枚举类型通常用于表示固定数量的常量值。这些值在枚举类型中是唯一的,并且它们的名称在类型上是关联的。 枚举的使用场景多种多样…

Xilnx FPGA 资源结构

Xilnx FPGA 资源结构内容来自b站up: https://www.bilibili.com/video/BV1Aj421f7bx/?spm_id_from=333.1387.homepage.video_card.click&vd_source=a77ccc3c47c86e4bbe7c68afa62a86cafpga 主要资源CLB 的结构图中展…

react+antdesign达成后台管理系统面包屑

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

(应该写的比较清晰)D2. Max Sum OR (Hard Version)

自己写的时候码力不足,比较痛苦,但是没找到写的简单清晰的代码可以参考 于是憋了一下午写了一份,供他人参考 #include<iostream> #include<vector> #include<queue> #include<tuple> #incl…

我的网站dede工作室怎么赚钱

在软件开发中&#xff0c;设计API接口是一个重要而且复杂的任务。在设计API接口时&#xff0c;一个常见的问题是&#xff0c;是按照每个接口的职能来设计&#xff0c;还是按照每个页面所需的字段来设计&#xff1f; 本文将对这两种设计方法进行比较&#xff0c;并探讨它们的优…