问题标签 [clickhouse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clickhouse - 在 Ubuntu 16.04 上安装 Clickhouse 失败
如果有人告诉我如何在 Ubuntu 16.04 上安装,我们将不胜感激。我试过这个:
我采取的步骤: echo "deb http://repo.yandex.ru/clickhouse/trusty stable main" >> /etc/apt/sources.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4 # 可选
sudo apt-get 更新
sudo apt-get install clickhouse-client clickhouse-server-common
错误:
root@c-2:~# sudo apt-get install clickhouse-client clickhouse-server-common 正在读取包列表...完成 构建依赖关系树
正在读取状态信息...完成 一些包无法安装。这可能意味着您请求了一种不可能的情况,或者如果您使用的是不稳定的发行版,一些必需的软件包尚未创建或已从 Incoming 中移出。以下信息可能有助于解决这种情况:
以下软件包具有未满足的依赖关系: clickhouse-client :取决于:clickhouse-server-base (= 1.1.54245) 但不会安装 clickhouse-server-common :取决于:clickhouse-server-base (= 1.1.54245 ) 但它不会被安装 E: 无法纠正问题,您持有损坏的软件包。
logging - 用于批量插入的缓冲区数据
每次在我的网站上提出请求时,一些有关该事件的数据都会记录到数据库(Yandex ClickHouse)中。如果插入是在至少 1000 条记录的批量中完成的,ClickHouse 的工作速度会大大加快。在每次请求时,我都想将数据发送到另一台将存储数据的计算机,然后在缓冲区达到一定大小(例如 1000)时将其刷新到数据库。我正在考虑使用 RabbitMQ 进行消息传递/缓冲,但我`我不确定它是否是正确的工具。有什么建议么?
columnstore - 是否可以在 clickhouse 中通过插入查询直接存储 HyperLogLog / uniqState() 状态?
我们可以使用 AggregatedMergeTree 表引擎,它可用于聚合行。
通常在聚合数据中,我们对存储所有唯一标识符不感兴趣,并且仍然希望进行不同的计数。我们仍然希望能够进行另一个聚合以在之后获得这些行的唯一计数(通过选择查询中的分组行)。这就是 HyperLogLog 派上用场的地方,它被实现为 clickhouse 中的 uniqState 函数。
我想通过插入查询直接存储一个超级日志,并从我的客户端应用程序将其提供给 clickhouse 表。这可能吗?
apache-nifi - NiFi 使用 Clickhouse 驱动程序 NoClassDefFoundError
在 NiFi 中,我使用 Clickhouse 驱动程序。当我使用驱动程序“启用” DBCPConnectionPool 时,我得到 java.lang.NoClassDefFoundError: com/google/common/collect/MapMaker。
sql - 具有复杂 MySQL 数据源查询的 Clickhouse 字典
我想在我的 clickhouse 服务器中设置很多字典,其中一些不仅仅是简单的 MySQL 查询来获取现有值,对于一些我需要做 JOIN 和 WHERES,而 Clickhouse 中的字典配置只允许我告诉它将从哪个 MySQL 表中读取数据。是否可以为其设置自定义 MySQL 查询?其他有用的事情是在属性名称中使用 ALIASES .. 这样我以后就不会被迫使用 MySQL 列名。
谢谢你。
c# - 使用 Dapper 的 NextResult
我正在使用带有 ClickHouse 数据库的 Dapper ( https://clickhouse.yandex/ )。这是分布式的面向列的数据库。它工作得很好,但是查询结果可以分成很多块,所以我应该使用 NextResult 来检索所有数据。示例代码:
我正在尝试使用 Dapper。为了调用 NextResult 我应该使用QueryMultiple
方法。我做了代码:
ObjectDisposedException
但是当检索到所有数据并且 SQL 读取器变为空时,此代码会引发异常。我需要知道有没有办法知道我应该何时完成迭代?或者还有其他方法可以使用该数据库吗?
mysql - 在应用 LIMIT (clickhouse) 之前选择子查询的计数
我有一个聚合一些 UNION ALL 选择的子查询。除此之外,我准备SELECT
创建交叉表并将其限制为 20 个。我希望能够在将子查询结果限制在主查询中之前检索它们的总数。这是为了尝试构建一个分页来接收记录总数,然后是特定的页面记录网格。
示例查询:
第一个子选择返回大量数据,所以我想我可以计算它并作为一个列值或行返回,它会传播到限制 20 个结果的主选择。因为我需要知道整个结果集,但不想无限制地调用同一个查询两次,而有限制地只是为了获得 COUNT。至少有 12 个 UNION ALL 三级子选择,何必浪费资源。我希望尝试与 ClickHouse 不一定相关的通用 SQL 解决方案
我正在考虑使用count(*) OVER ()
,但是不支持,所以如果那是唯一的选项,我知道我需要运行两次查询。
sql - 在 ClickHouse、JOIN 与重复信息中查询此信息的最佳方式
我有以下问题。
我需要记录很多信息,而不能以多种方式进行分组和过滤。该信息恰好有步骤,所以让我们想象它有 4 个步骤,其中每个步骤都会为上一步添加更多信息。
目前我有 4 个表,每个步骤一个,包含每个步骤和前一个步骤的所有信息。
所以一个例子就是。
Step1 (transaction_id, date, country_id, device_id, browser_id, ip, language_id, target_id, etc) -> 40kk records
Step2 (transaction_id, date, country_id, device_id, browser_id, ip, language_id, target_id, step2_date, step2_ip, etc) -> 35kk 记录
Step3 (transaction_id, date, country_id, device_id, browser_id, ip, language_id, target_id, step2_date, step2_ip, step3_date, step3_ip, time_taken, etc) -> 5kk条记录
Step4 (transaction_id, date, country_id, device_id, browser_id, ip, language_id, target_id, step2_date, step2_ip, step3_date, step3_ip, time_taken, step4_date, step4_ip, final_value, etc) -> 1kk 记录
正如您在示例中看到的,每个步骤都包含所有先前的数据以及新字段。
理想的情况是第一步包含所有初始数据(目前约为 50 个字段),其他步骤包含每个步骤的附加数据,然后通过 transaction_id 加入并能够进行 GROUP 和 FILTER。
我尝试了这种方法,但由于它必须对每个条目进行迭代以匹配其他步骤中的事务,因此它似乎不太理想。(查询大约需要 3 秒,而另一种方式大约需要 0.1 秒)
另一方面,拥有每个表中的所有可用信息,允许我过滤 UNION 或 JOIN 之前的数据,并且速度更快,但我需要在每个步骤中复制数据..
我需要从 4 个步骤中查询一个 SELECT,它会告诉我例如特定日期和 device_id 以及按 country_id 分组的步骤 1、步骤 2、步骤 3、步骤 4 以及每个步骤可能具有的其他标志。
那么,问题是是否有任何其他方法可以加快步骤之间的关系,从而避免每个步骤中的信息重复并保持速度?也许是一种索引 transaction_id 的方法(这是唯一的并且在第一步中生成)
让我们考虑一下 step1 表每天将接收大约 100kk 条记录,而另一个表将接收同样多的信息。
谢谢你。
clickhouse - 如何禁用 ClickHouse JDBC 的信息日志记录
每当我使用 JDBC 连接到 ClickHouse 时,我都会在输出中得到以下信息:
如何禁用它?
clickhouse - ClickHouse 替换 MergeTree
我试图了解ReplacingMergeTree
引擎是如何工作的。
我用这样的引擎配置了下表。
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-09-29 │ 2 │
│ IM │ FR │ 2 │ 2017-09-29 │ 0 │
│ IM │ FR │ 3 │ 2017-09-29 │ 1 │
└───────┴─────────┴────────┴────────────┴─────────┘
此时一切正常。
然后我执行以下INSERT
.
INSERT INTO table(brand, country, id, updated, version) VALUES ('IM', 'FR', 1, '2017-10-29', 3);
正如预期的那样,有 2 行 id 1
:
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-09-29 │ 2 │
│ IM │ FR │ 2 │ 2017-09-29 │ 0 │
│ IM │ FR │ 3 │ 2017-09-29 │ 1 │
└───────┴─────────┴────────┴────────────┴─────────┘
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-10-29 │ 3 │
└───────┴─────────┴────────┴────────────┴─────────┘
由于该表的主键是(brand, country, id)
,因此我希望该表上的合并将替换具有较低版本 2 的 id=1 的行。
触发合并OPTIMIZE TABLE table
以检查,似乎它没有以这种方式工作,并且两行都令人惊讶地保留了下来。
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-10-29 │ 3 │
└───────┴─────────┴────────┴────────────┴─────────┘
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-09-29 │ 2 │
│ IM │ FR │ 2 │ 2017-09-29 │ 0 │
│ IM │ FR │ 3 │ 2017-09-29 │ 1 │
└───────┴─────────┴────────┴────────────┴─────────┘