我确实在文档中找到了一些示例,其中通过将参数传递给ENGINE部分来创建主键.但是我没有找到关于ENGINE的任何参数的任何描述,它意味着什么以及如何创建主键.提前致谢.将此信息添加到它不存在的文档中会很棒.
该文档Float32并没有真正解释 的行为Float64以及不鼓励它们的原因。
我问这个问题是因为在将这些与控制台 cli 请求或 Rest 请求一起使用时,我看到了奇怪的行为。无论精度如何,发送到 clickhouse 的浮点值在最后一位都会稍微修改。
示例:1258.021545成为1258.0215453.
每次插入这些值时,最后一位数字都会更改。我不认为问题来自太高的精度值,因为这些值来自 Java 双精度数。
我有一个带有一个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);
距离值将是距日期之后一定秒数(sessionSecond)到某个点的距离。我添加了一些示例值,因此该表如下所示:
现在,我想获取所有包含大于7的距离的行。我在这里找到了数组运算符文档,并尝试了arrayExists函数,但是它不能按我期望的那样工作。从文档中可以看出,此函数“如果'arr'中至少有一个元素的'func'返回值不是0,则返回1。否则,返回0”。但是,当我在下面运行查询时,返回三个零,我应该得到一个0和两个1:
SELECT arrayExists(
    val -> val > 7,
    arrayEnumerate(distance))
FROM ArrayTest;
最终,我想执行此选择,然后将其与表内容结合在一起,以仅返回存在= 1的行,但在此之前我需要第一步。我使用arrayExists错误吗?我发现更令人困惑的是,当我将比较值更改为2时,我得到的全是1。使用数组函数可以实现这种过滤吗?
谢谢
我正在将Spring JPA与休眠ORM项目一起使用,并希望与ClickHouse集成。我发现了一些正在运行的ClickHouse JDBC参考
ClickHouseJDBCDemo ClickHouseJDBCDemo
但是我渴望知道是否有像Hibernate这样的ORM工具更好的与Spring JPA进行数据库交互的方法。
遵循文档中的示例: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;
在Kafka主题中,我每秒收到约150条消息。
一切都很好,部分原因是表中的数据更新有很大的延迟,这绝对不是实时的。
似乎只有当我到达65536个 …
假设我有一个给定的时间范围。为了进行解释,让我们考虑一些简单的事情,例如整个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
1514761200– 2018-01-01
1546210800–2018-12-31
返回:
time       metric
2018-01-01 345
2018-04-01 123
我需要:
time       metric
2018-01-01 345
2018-04-01 123
2018-07-01 0
2018-10-01 0
这是简化的示例,但是在实际使用情况下,聚合将是例如。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 …我在 ClickHouse 中有现有的表。我想找出哪个字段是索引字段。我该怎么做?
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, …在 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      
但出现错误
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..
我可以放入v3GROUP BY ,它似乎确实有效,但按指标分组效率不高。
有any聚合函数,但我们实际上想要all值(通过 LIMIT BY 子句限制为 2)而不是any值,所以这听起来不是正确的解决方案。
Received exception from …在 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
我只是想找到一些可以轻松做到这一点的方法。有什么办法吗?谢谢~
clickhouse ×10
sql ×3
apache-kafka ×1
columnstore ×1
database ×1
hibernate ×1
indexing ×1
jdbc ×1
yandex ×1