
人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载本文是 CardBenchCardBench: A Benchmark for Learned Cardinality Estimation in Relational Databases零样本基数估计基准中数据制品Artifacts获取与使用的完整实战指南。文章围绕 DowloadArtifacts.md 展开详细梳理数据集 CSV、PostgreSQL 建表/导入脚本、数据集元数据schema、column statistics、string statistics以及三类训练查询图Single Table / Binary Join / Multi Join的下载清单并结合仓库源码说明这些制品在 CardBench 训练数据生成管线中的位置与消费方式。读完本文你将掌握 CardBench 全部公开制品的清单结构、下载方法、还原到 PostgreSQL 的完整步骤以及如何用 Sparse Deferred 读取 npz 训练查询图进行模型训练与评估。图CardBench 训练数据集生成管道——从数据库出发经过统计信息计算、查询生成与执行、基数采集最终得到带注释的查询图QueryGraphs。本文介绍的制品正是该管道的最终产物与中间数据。一、CardBench 与它的公开制品体系CardBench 是面向关系数据库学习型基数估计learned cardinality estimation的基准仓库由两部分组成训练数据集存于training_datasets目录与生产训练数据集的代码。官方公开的制品Artifacts包括四类制品类别内容存放位置GCS 前缀数据集 CSV20 个数据集的原始表数据cardbench_datasets_for_github/建表脚本创建 PostgreSQL 兼容表结构的 SQL 脚本cardbench_datasets_for_github/create_schema_scripts/导入脚本将 CSV 复制进对应数据表的 SQL 脚本cardbench_datasets_for_github/copy_to_db_scripts/数据集元数据每个数据集的 schema / column statistics / string statistics JSONcardbench_datasets_for_github/datasets_metadata/训练查询图每库三类single_table / binary_join / multi_joinnpz 文件cardbench_query_graphs_for_github/这些制品的用途在 README.md 中被明确为两条路径直接用查询图训练/评估基数估计模型——最简单不需要运行 CardBench 代码是绝大多数用户的使用方式详见 TrainingQueryGraphs.md复用数据集与元数据生成新工作负载——通过generate_queries_and_save_to_file.py、run_queries.py等代码重建查询图。由于完整跑一遍统计计算、查询执行管线的成本很高官方在发布代码的同时发布了最终产物与中间制品DowloadArtifacts.md正是这份制品清单的索引。二、数据集 CSV底层数据与还原方式DowloadArtifacts.md明确指出The underlying data for the datasets is available in CSV files即所有数据集的底层表数据以 CSV 形式提供并配套提供两套 SQL 脚本用于在PostgreSQL 兼容数据库中还原建表脚本Create schema scripts*_create_tables_pg_oss.sql按数据集命名共 20 份导入脚本Copy dataset CSV to PG scripts*_copy_to_postgres.sql将 CSV 复制到对应表。两个脚本目录下的数据集覆盖了 accident、airline、consumer、employee、movielens、tpch_10G 以及 15 个sample_*数据集如sample_cms_synthetic_patient_data_omop、sample_geo_openstreetmap、sample_stackoverflow、sample_wikipedia等与 TrainingQueryGraphs.md 中的训练数据集清单一一对应。带sample_前缀的库名即文档中所说的进行了下采样down sampled的数据库。2.1 导入脚本中的关键占位符使用导入脚本前必须注意DowloadArtifacts.md明确说明脚本中含有DATASET_PATH_PREFIX占位符需要将其替换为 CSV 文件下载后的父目录实际路径。例如consumer_copy_to_postgres.sql中的典型模式为COPY table_name FROM DATASET_PATH_PREFIX/consumer/xxx.csv WITH (FORMAT csv, HEADER true);将DATASET_PATH_PREFIX全部替换为你本地的 CSV 父目录即可执行。这是还原数据集时最容易出错的一步务必在导入前全局替换。2.2 还原步骤总览结合脚本用途完整还原流程为从 GCS 下载 20 个数据集的 CSV 文件到统一父目录在 PostgreSQL 中依次执行对应数据集的*_create_tables_pg_oss.sql创建表全局替换*_copy_to_postgres.sql中的DATASET_PATH_PREFIX占位符执行导入脚本完成数据装载。三、数据集元数据查询生成器的输入除原始数据外官方还发布了每个数据集的元数据 JSON命名规则为dataset_name.{schema,column_statistics,string_statistics}.json即每个数据集三份*.schema.json表结构列名、列类型对应calculate_statistics_library中收集的表/列信息*.column_statistics.json列级统计如null_frac、num_unique、row_count、数值列的分位数与 min/max 等*.string_statistics.json字符串列的统计如频率词、唯一值等。这三类 JSON 正是查询生成器query generator的输入。在 README.md 中说明查询生成器以包含数据库 schema、列统计、字符串列统计的 JSON 文件集为输入这些 JSON 可由calculate_statistics_and_save_to_database.py计算的统计信息通过 save_dataset_statistics_to_json_files.py 生成仓库同时内置了生成好的 JSON 于generate_queries_library/dataset_statistics_jsons若直接使用现有 JSON可跳过统计计算这一步。从源码看save_dataset_statistics_to_json_files.py 依次调用write_dataset_schema_to_json_file、write_dataset_column_statistics_to_json_file、write_dataset_string_statistics_to_json_file三个写入器位于generate_queries_library/从元数据库读取统计信息并输出到configuration.DIRECTORY_PATH_JSON_FILES指定的目录——这与下载到的元数据 JSON 结构一致。3.1 元数据在统计管线中的来源元数据背后的统计计算由 calculate_statistics_and_save_to_database.py 完成它封装了calculate_statistics_library中的一系列步骤collect_and_write_table_information、collect_and_write_column_information、calculate_and_write_column_statistics、calculate_and_write_extra_column_statistics、calculate_and_write_percentiles、calculate_and_write_unique_values、calculate_and_write_frequent_words、calculate_and_write_column_histograms、create_table_samples_fixsize、calculate_and_write_pearson_correlation等。所有统计结果存入元数据库的统计表中表结构由 statistics_sql_tables_definition.sql 定义例如tables_info/columns_info表与列的基本信息columns_statsnull_frac、num_unique、row_countcolumns_*_extra_stats按 INT64 / FLOAT64 / NUMERIC / STRING / DATE / DATETIME 等类型分表min/max、分位数、均值、唯一值、频率词等columns_correlation列间 Pearson 相关系数pk_fk主外键关系histograms_table近似分位数直方图。这些表的定义与下载到的 JSON 元数据字段一一对应理解它们有助于解读元数据内容。仓库中 configuration.py 的TYPES_TO_TABLES映射展示了不同列类型如何路由到不同的统计表如INT64→columns_int64_extra_stats、STRING→columns_string_extra_stats可作为解读元数据的参考。四、训练查询图三类 npz 与命名规则训练查询图是 CardBench 的核心训练制品。每个训练实例是一个SQL 查询 → 带注释的图的表示查询在 BigQuery 上实际执行得到基数cardinality作为图的上下文context一并存储SQL 字符串也包含在图上下文中。DowloadArtifacts.md按三个子目录组织single_table/database_single_table.npz查询对单表应用 1–4 个过滤谓词binary_join/database_binary_join.npz查询连接两张表且每表应用 1–3 个过滤谓词multi_join/database_multi_join.npz查询包含 1–7 个连接、每表 0–2 个过滤谓词。文件命名规则为database_name_single_table/binary_join/multi_join.npzTrainingQueryGraphs.md。示例查询-- Single Table 示例tpch_10G SELECT count(*) FROM tpch_10G.nation as nation WHERE nation.n_nationkey 6 AND nation.n_comment IS NULL AND nation.n_regionkey 1; -- Binary Join 示例tpch_10G SELECT count(*) FROM tpch_10G.region as region JOIN tpch_10G.nation as nation ON region.r_regionkey nation.n_regionkey WHERE nation.n_comment IS NOT NULL AND nation.n_nationkey ! 5;各数据集的规模概览节选自 TrainingQueryGraphs.md数据集表数单表查询二元连接查询多连接查询accidents39125845429242consumer35961557111857movielens13144881575717067sample_stackoverflow14143051277311399tpch_10G81172713181163184.1 查询图在生成管线中的位置查询图文件是generate_training_querygraphs_and_save_to_file.py的产物。从源码调用链看该脚本按workload_id与query_run_id从元数据库的WORKLOAD_DEFINITION_TABLE与QUERY_RUN_INFORMATION_TABLE读取查询与基数然后依次执行convert_sql_to_relational_operatorsSQL → 关系算子JOIN / SCANconvert_relational_operators_to_query_plan关系算子 → 带统计注释的查询计划图convert_query_plan_to_graph查询计划 → 通用图表示validate_query_plan_and_graph校验create_sparse_deferred_graph_struct_object转为 Sparse Deferred 图结构对象最终写入.npz文件。脚本中还内置了open_source_graphs_naming映射如7046_193: tpch_10G_single_table.npz说明下载的 npz 与内部workload_id_query_run_id的对应关系也印证了下载文件与生成代码的一致性。此外脚本会过滤掉零基数查询与无 JOIN / WHERE / GROUP BY 子句的查询并只保留唯一查询。五、使用训练查询图Sparse Deferred 读取实战训练数据使用 Sparse Deferred 目录即相关实现定义的GraphStruct编码提供 TF/JAX 友好的序列化格式。读取 npz 需要python 3.10、sparse-deferred与numpy均可通过 pip 安装。以下为 TrainingQueryGraphs.md 提供的读取示例可用于任何下载的 npzfrom sparse_deferred.structs import graph_struct GraphStruct graph_struct.GraphStruct InMemoryDB graph_struct.InMemoryDB # 加载 consumer_single_table 数据集 filename single_table/consumer_single_table.npz db InMemoryDB.from_file(filename) # 训练实例数 print(Number of training instances:, db.size) # 5571 # 图结构 schema边类型定义 print(Schema:, db.schema) # {table_to_attr: (tables, attributes), attr_to_pred: ...} # 节点类型 print(Node types:, db.get_item(0).nodes.keys()) # dict_keys([g, tables, attributes, predicates, ops, correlations]) # 表节点特征 print(Table node features:, db.get_item(0).nodes[tables].keys()) # dict_keys([rows, name]) # 图级特征基数、执行时间、查询 id、SQL 原文 g db.get_item(0).nodes[g] print(Query cardinality:, g[cardinality][0]) print(Execution time:, g[exec_time][0]) print(Query id:, g[query_id][0]) print(Query:, g[query][0])节点类型共 6 类g图级含cardinality、exec_time、query_id、query、tables含rows、name、attributes含null_frac、num_unique、data_type、分位数、min/max 等、predicates含predicate_operator、estimated_selectivity、constant等、opsoperatorjoin/scan、correlationstype、correlation、validity。值得注意的读取细节属性特征按类型填充——字符串列填充percentiles_str等字符串特征数值列填充percentiles_num等数值特征空特征统一用-1填充查询图中的 SQL 是以 BigQuery 风格命名的表如bq-cost-models-exp.consumer.HOUSEHOLDS因为查询在 BigQuery 上执行图结构中的边类型table_to_attr、attr_to_pred、attr_to_op、op_to_op、pred_to_op、attr_to_corr、corr_to_pred等完整刻画了查询计划的拓扑训练/评估时可直接以db.schema为准构造 GNN。六、从制品到自定义工作负载代码管线的衔接若要在下载的数据集与元数据之上生成新的工作负载需要运行 CardBench 代码完整流程见 README.md为下采样数据库如需要create_table_samples_fixsize4K 行采样计算统计信息运行 calculate_statistics_and_save_to_database.py统计结果写入元数据库生成训练 SQL 查询运行 generate_queries_and_save_to_file.py将查询按行写入 workload 文件每个 workload 由整数workload_id标识参数存入WORKLOAD_DEFINITION_TABLE执行查询采集基数运行 run_queries.pyworkload_id结果SQL 与基数写入QUERY_RUN_INFORMATION_TABLE每次运行产生新的query_run_id生成训练查询图运行 generate_training_querygraphs_and_save_to_file.pyworkload_id query_run_id输出.npz。下载的数据集元数据 JSON 可直接作为第 3 步查询生成器的输入仓库内置的generate_queries_library/dataset_statistics_jsons即此类 JSON从而跳过统计计算步骤下载的查询图 npz 则可直接用于模型训练/评估无需运行任何代码。运行前需按 configuration.py 中的注释完成配置替换元数据库/数据表 id、DIRECTORY_PATH_JSON_FILES、DIRECTORY_PATH_QUERY_FILES、DIRECTORY_TRAINING_QUERYGRAPH_OUTPUT等路径并设置DATA_DBTYPE/METADATA_DBTYPE当前实现默认以 BigQuery 为后端database_connector.py提供可扩展的数据库连接器。原始数据还原后也可作为data 数据库用于执行查询。七、常见问题与注意事项导入脚本占位符未替换DATASET_PATH_PREFIX是导入失败的常见原因执行前务必全局替换为本地 CSV 父目录数据集为下采样版本带sample_前缀的数据集是下采样后的版本其统计信息与完整数据可能存在差异论文与文档以这些制品为准查询图为分片存储InMemoryDB.from_file支持通过 glob 匹配加载分片文件文档说明训练数据以分片形式存储可用 glob 找到所有分片属性特征按类型填充空特征值统一为 -1读取特征时需注意不同列类型对应的特征字段数值 vs 字符串JSON 元数据与 SQL 统计表对应解读元数据时可对照 statistics_sql_tables_definition.sql 与 configuration.py 的TYPES_TO_TABLES映射BigQuery 表名查询图上下文中的 SQL 使用 BigQuery 项目/数据集前缀若在你的环境中执行需相应调整。八、小结DowloadArtifacts.md是 CardBench 全部公开制品的总入口。本文围绕该文档将其中的数据集 CSV、建表/导入脚本、数据集元数据、训练查询图四大类制品整理为可执行的下载与使用流程并结合仓库源码README.md、TrainingQueryGraphs.md、statistics_sql_tables_definition.sql、configuration.py 及generate_training_querygraphs_library/系列脚本阐明了每个制品的生成源头与消费方式。无论是直接加载 npz 训练基数估计模型还是在已发布数据集上生成新工作负载本文提供的清单与代码路径都足以支撑你的下一步实验。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐CardBench 训练查询图Training Query Graphs完全指南从 SQL 查询到零样本基数估计的训练数据CardBench 训练查询图Training Query Graphs完全指南从 SQL 查询到零样本基数估计的训练数据 导读 本指南系统讲解 Card人工智能深度学习NLP计算机视觉强化学习repvgg_a2.rvgg_in1k实战教程10个图像分类应用场景全解析repvgg_a2.rvgg_in1k实战教程10个图像分类应用场景全解析 想要快速掌握强大的图像分类技术吗repvgg_a2.rvgg_in1k作为基于I零代码搞定数据库查询Vanna训练数据管理实战指南零代码搞定数据库查询Vanna训练数据管理实战指南 你还在为复杂的SQL查询发愁吗作为运营或业务人员面对数据库时是否常常感到无从下手本文将带你掌握Van人工智能AI AgentRAG数据库后端数据可视化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考