标签: clickhouse

如何在ClickHouse中创建主键

我确实在文档中找到了一些示例,其中通过将参数传递给ENGINE部分来创建主键.但是我没有找到关于ENGINE的任何参数的任何描述,它意味着什么以及如何创建主键.提前致谢.将此信息添加到它不存在的文档中会很棒.

database columnstore clickhouse

5
推荐指数
1
解决办法
5554
查看次数

为什么在 ClickHouse 表中不鼓励浮点表示?

文档Float32并没有真正解释 的行为Float64以及不鼓励它们的原因。

我问这个问题是因为在将这些与控制台 cli 请求或 Rest 请求一起使用时,我看到了奇怪的行为。无论精度如何,发送到 clickhouse 的浮点值在最后一位都会稍微修改。

示例:1258.021545成为1258.0215453.

每次插入这些值时,最后一位数字都会更改。我不认为问题来自太高的精度值,因为这些值来自 Java 双精度数。

floating-point decimal-point clickhouse

5
推荐指数
1
解决办法
2598
查看次数

如何按数组列内容过滤Clickhouse表?

我有一个带有一个Array(UInt16)列的Clickhouse表。我希望能够从该表中过滤结果,以仅获取其中数组列中的值高于阈值的行。我一直在尝试使用一些数组函数(arrayFilter和arrayExists)来实现这一点,但是我对SQL / Clickhouse查询语法不够熟悉,无法使其正常工作。

我使用以下方法创建了表:

CREATE TABLE IF NOT EXISTS ArrayTest (
    date Date,
    sessionSecond UInt16,
    distance Array(UInt16)
) Engine = MergeTree(date, (date, sessionSecond), 8192);
Run Code Online (Sandbox Code Playgroud)

距离值将是距日期之后一定秒数(sessionSecond)到某个点的距离。我添加了一些示例值,因此该表如下所示:

带有样本值的表格

现在,我想获取所有包含大于7的距离的行。我在这里找到了数组运算符文档并尝试了arrayExists函数,但是它不能按我期望的那样工作。从文档中可以看出,此函数“如果'arr'中至少有一个元素的'func'返回值不是0,则返回1。否则,返回0”。但是,当我在下面运行查询时,返回三个零,我应该得到一个0和两个1:

SELECT arrayExists(
    val -> val > 7,
    arrayEnumerate(distance))
FROM ArrayTest;
Run Code Online (Sandbox Code Playgroud)

最终,我想执行此选择,然后将其与表内容结合在一起,以仅返回存在= 1的行,但在此之前我需要第一步。我使用arrayExists错误吗?我发现更令人困惑的是,当我将比较值更改为2时,我得到的全是1。使用数组函数可以实现这种过滤吗?

谢谢

clickhouse

5
推荐指数
1
解决办法
2802
查看次数

ClickHouse Spring JPA Hibernate支持

我正在将Spring JPA与休眠ORM项目一起使用,并希望与ClickHouse集成。我发现了一些正在运行的ClickHouse JDBC参考

ClickHouseJDBCDemo ClickHouseJDBCDemo

但是我渴望知道是否有像Hibernate这样的ORM工具更好的与Spring JPA进行数据库交互的方法。

hibernate jdbc spring-data-jpa clickhouse

5
推荐指数
0
解决办法
1202
查看次数

ClickHouse Kafka效果

遵循文档中的示例:https : //clickhouse.yandex/docs/en/table_engines/kafka/

我使用Kafka Engine和一个实例化视图创建了一个表,该视图将数据推送到MergeTree表。

这是我的表格结构:

CREATE TABLE games (
    UserId UInt32,
    ActivityType UInt8,
    Amount Float32,
    CurrencyId UInt8,
    Date String
  ) ENGINE = Kafka('XXXX.eu-west-1.compute.amazonaws.com:9092,XXXX.eu-west-1.compute.amazonaws.com:9092,XXXX.eu-west-1.compute.amazonaws.com:9092', 'games', 'click-1', 'JSONEachRow', '3');


CREATE TABLE tests.games_transactions (
    day Date,
    UserId UInt32,
    Amount Float32,
    CurrencyId UInt8,
    timevalue DateTime,
    ActivityType UInt8
 ) ENGINE = MergeTree(day, (day, UserId), 8192);


  CREATE MATERIALIZED VIEW tests.games_consumer TO tests.games_transactions
    AS SELECT toDate(replaceRegexpOne(Date,'\\..*','')) as day, UserId, Amount, CurrencyId, toDateTime(replaceRegexpOne(Date,'\\..*','')) as timevalue, ActivityType
    FROM default.games;
Run Code Online (Sandbox Code Playgroud)

在Kafka主题中,我每秒收到约150条消息。

一切都很好,部分原因是表中的数据更新有很大的延迟,这绝对不是实时的。

似乎只有当我到达65536个 …

apache-kafka clickhouse

5
推荐指数
1
解决办法
2377
查看次数

如何在ClickHouse中按时间段分组并用null / 0s填充丢失的数据

假设我有一个给定的时间范围。为了进行解释,让我们考虑一些简单的事情,例如整个2018年。我想从ClickHouse查询数据作为每个季度的总和,因此结果应为4行。

问题是我只有两个季度的数据,因此使用时GROUP BY quarter,仅返回两行。

SELECT
     toStartOfQuarter(created_at) AS time,
     sum(metric) metric
 FROM mytable
 WHERE
     created_at >= toDate(1514761200) AND created_at >= toDateTime(1514761200)
    AND
     created_at <= toDate(1546210800) AND created_at <= toDateTime(1546210800)
 GROUP BY time
 ORDER BY time
Run Code Online (Sandbox Code Playgroud)

15147612002018-01-01
15462108002018-12-31

返回:

time       metric
2018-01-01 345
2018-04-01 123
Run Code Online (Sandbox Code Playgroud)

我需要:

time       metric
2018-01-01 345
2018-04-01 123
2018-07-01 0
2018-10-01 0
Run Code Online (Sandbox Code Playgroud)

这是简化的示例,但是在实际使用情况下,聚合将是例如。5分钟而不是四分之一,GROUP BY将至少具有一个以上属性,GROUP BY attribute1, time因此期望的结果是

time        metric  attribute1
2018-01-01  345     1
2018-01-01  345     2
2018-04-01  123     1
2018-04-01 …
Run Code Online (Sandbox Code Playgroud)

sql clickhouse

5
推荐指数
2
解决办法
1826
查看次数

Clickhouse:如何在clickhouse SQL中查找索引字段?

我在 ClickHouse 中有现有的表。我想找出哪个字段是索引字段。我该怎么做?

sql indexing clickhouse

5
推荐指数
1
解决办法
6457
查看次数

替换 clickhouse 中的 row_number()

clickhouse数据库不支持Row_number(),寻找替代函数。

SELECT company_name AS company,
       DOMAIN,
       city_name AS city,
       state_province_code AS state,
       country_code AS country,
       location_revenue AS revenueRange,
       location_TI_industry AS industry,
       location_employeecount_range AS employeeSize,
       topic,
       location_duns AS duns,
       rank AS intensityRank,
       dnb_status_code AS locationStatus,
       rank_delta AS intensityRankDelta,
       company_id,
       ROW_NUMBER() OVER (PARTITION BY DOMAIN) AS rowNumberFROM company_intent c
 WHERE c.rank > 0
   AND c.rank <= 10
   AND c.signal_count > 0
   AND c.topic IN ('Cloud Computing')
   AND c.country_code = 'US'
   AND c.rank IN (7, 8, 9, 10)
 GROUP BY c.location_duns,
          company_name,
          DOMAIN, …
Run Code Online (Sandbox Code Playgroud)

sql yandex clickhouse

5
推荐指数
2
解决办法
8339
查看次数

ClickHouse 中按组排列的前 N ​​行

在 ClickHouse 中按组查询前 N 行的正确方法是什么?
让我们以具有 id2、id4、v3 列且 N=2 的 tbl 为例。我尝试了以下方法

SELECT                                                                          
    id2,                                                                        
    id4,                 
    v3 AS v3        
FROM tbl
GROUP BY                 
    id2,                 
    id4                  
ORDER BY v3 DESC                                                                
LIMIT 2 BY                       
    id2,                 
    id4      
Run Code Online (Sandbox Code Playgroud)

但出现错误

Received exception from server (version 19.3.4):
Code: 215. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception
: Column v3 is not under aggregate function and not in GROUP BY..
Run Code Online (Sandbox Code Playgroud)

我可以放入v3GROUP BY ,它似乎确实有效,但按指标分组效率不高。

any聚合函数,但我们实际上想要all值(通过 LIMIT BY 子句限制为 2)而不是any值,所以这听起来不是正确的解决方案。

Received exception from …
Run Code Online (Sandbox Code Playgroud)

greatest-n-per-group clickhouse

5
推荐指数
1
解决办法
2万
查看次数

Clickhouse:有没有办法在一个“alter table drop partition ****”查询中删除多个分区?

在 clickhouse 中,表是按天分区的。现在,alter为了方便起见,我想在一个查询中删除多分区。

我已经使用 while 循环通过 shell 完成了此操作:

while [[ $startDate < $endDate ]]
do
    clickhouse-client --query="alter table db.table drop partition toYYYYMMDD(toDate($startDate))"
    startDate=`date -d "+1 day $startDate" +%Y-%m-%d`
done
Run Code Online (Sandbox Code Playgroud)

我只是想找到一些可以轻松做到这一点的方法。有什么办法吗?谢谢~

clickhouse

5
推荐指数
1
解决办法
3241
查看次数