将高级版DNS 365导入ClickHouse中
本项目旨在将 DNS_Premium_365 数据集上传到本地 ClickHouse 数据库中,以实现高效、优化和快速查询功能。
方法
解压
Premium DNS 文件非常大,如使用单线程工具如 gzip 解压缩将花费很长时间,且未压缩的数据可能超过 1TB。因此,我们推荐使用多线程压缩/解压缩工具,如 pigz,地址https://zlib.net/pigz/ ,它可以利用系统的多核,提高解压缩时间达70%以上。
数据预处理
我们使用 shell 脚本处理了 2024 年 3 月份 DNS_Premium_365 数据集中的 17 个 .gz 文件。每个文件在解压后都记录了行数和大小,以验证数据的完整性并为后续处理做好准备。
顶级域名预过滤(可选)
使用 shell 脚本从解压后的文件中过滤出我们感兴趣的顶级域名(TLD),生成相应的域名列表。在数据准备阶段这一步保证质量来说至关重要。我们使用的顶级域名包括:["com", "org", "net", "ru", "de", "cn", "uk", "br", "jp", "ai", "io", "fr", "it", "ir", "il", "ua", "kp", "xyz", "online", "top", "shop", "site", "icu", "club", "store", "vip"]。
ClickHouse 数据库处理
安装和初始化
请参阅 ClickHouse 官方文档了解安装过程:ClickHouse 快速入门,https://clickhouse.com/docs/en/getting-started/quick-start。
数据库创建
执行 SQL 命令创建 production_db 数据库: ./clickhouse client --query="CREATE DATABASE production_db
数据表设计与导入
根据客户需求和数据结构创建表格。以下是创建表格示例:
./clickhouse client --query="CREATE TABLE production_db.domain_new2 (domain String, timestamp UInt64, ip String) ENGINE = MergeTree() ORDER BY domain"
脚本用于自动处理 17 个 DNS 文件,迭代创建相应的表格并插入数据。
使用案例示例:
- 数据上传到 ClickHouse 后,可以使用 SHOW DATABASES 和 USE your_database 命令选择数据库,也可以使用 SHOW TABLES 查看现有表格。
- 在 ClickHouse 中可以使用 SQL 命令进行数据分析,如搜索特定域名或 IP 地址。示例如下,以下命令在 8.343 秒内检索到 12 亿个带有 .com 顶级域名(TLD)的 FQDN:
- 脚本可以在所有表格中查找特定的域名或 IP 地址。以下示例是寻遍 19 个表格查找的以 104.154.* 开头的 IP:
总结
本项目成功利用 ClickHouse 和自动化脚本高效处理和分析大量域名和 IP 地址数据。通过使用 SQL 命令和脚本进行自动化表格创建和批量数据插入,无缝进行了数据管理。在所有表格中进行数据搜索以识别特定域名或 IP 地址的能力展示了显著的分析能力。展望未来,这些方法可以扩展和适用于更大的数据集,进一步验证了其在数据处理和分析任务中的有效性。