news 2026/9/18 19:45:58

DataHub Hive Metastore 连接器实战:SQL 直连与 Thrift 双模式元数据摄取

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DataHub Hive Metastore 连接器实战:SQL 直连与 Thrift 双模式元数据摄取

DataHub Hive Metastore 连接器实战:SQL 直连与 Thrift 双模式元数据摄取

【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub

本文基于 DataHub 仓库中metadata-ingestion/docs/sources/hive-metastore/目录下的官方模块文档与连接器源码,系统讲解hive-metastore摄取源的两种连接模式(SQL 直连与 Thrift API)、完整配置参数、数据库权限准备、Kerberos 认证、存储血缘与 Presto/Trino 视图血缘等核心能力,以及性能调优与故障排查方法。读完本文,你可以按自身环境(能否直连 Metastore 数据库、是否 Kerberized 集群)选对连接模式,写出可复制运行的摄取配方,并理解各参数在源码中的实际作用。

一、连接器定位与概念映射

Hive Metastore(HMS)是存放 Hive 元数据(数据库、表、视图、列、存储位置等)的核心组件,其元数据通常落在 MySQL/PostgreSQL 等关系数据库中,或通过 Thrift API(默认端口 9083)对外服务。DataHub 的hive-metastore摄取源正是针对这两类访问途径提供了统一连接器。

根据 模块概览文档,该连接器覆盖的核心元数据实体包括:

  • 数据集/表/视图(datasets/tables/views)、Schema 字段、容器(containers);
  • 表级与列级血缘(table- and column-level lineage);
  • 有状态的删除检测(stateful deletion detection,通过 stateful ingestion 实现)。

概念映射关系如下表(引自 README 的 Concept Mapping 一节):

源系统概念DataHub 概念说明
平台/账户/项目作用域Platform Instance、Container在平台上下文内组织资产
核心技术资产(如 table/view/topic/file)Dataset主要摄取的技术资产
Schema 字段 / 列SchemaField支持 schema 抽取时包含
属主与协作主体CorpUser、CorpGroup由支持属主与身份元数据的模块输出
依赖与加工关系Lineage edges支持血缘抽取并启用时输出

从源码 hive_metastore_source.py 的类装饰器可以看到,该连接器被标记为SupportStatus.GA(正式发布级),默认启用的能力包括描述(DESCRIPTIONS)、域(DOMAINS)、schema 元数据(SCHEMA_METADATA)、连接测试(TEST_CONNECTION)、删除检测(DELETION_DETECTION,经由 stateful ingestion)以及容器(CONTAINERS);粗/细粒度血缘则由include_view_lineage(视图血缘,默认开启)和emit_storage_lineage/include_column_lineage(存储血缘)控制,数据剖析(DATA_PROFILING)不支持。

此外,同一个HiveMetastoreSource实现还支持presto-on-hive等别名入口,见 pyproject.toml 中的注册:presto-on-hive = "datahub.ingestion.source.sql.hive.hive_metastore_source:HiveMetastoreSource",并配有独立文档 presto-on-hive_recipe.yml。

二、两种连接模式与选型

根据 前置说明文档,连接器通过connection_type字段选择连接方式:

特性SQL 模式(默认)Thrift 模式
适用场景可直连 Metastore 后端数据库仅能访问 HMS Thrift API
认证方式数据库账号密码Kerberos/SASL 或无认证
端口数据库端口(3306/5432)Thrift 端口(9083)
依赖数据库驱动pymetastorethrift-sasl

选型原则很直接:能拿到 Metastore 数据库读权限就用 SQL 模式(查询批量、性能更好);在 Kerberized Hadoop 集群、只暴露 Thrift API 的云托管 Hive 服务或严格网络分段环境中,则用 Thrift 模式。

依赖安装

两个模式共用的hive-metastoreextras 在 pyproject.toml 中声明,包含pymetastoreacryl-pyhive[hive-pure-sasl]kerberospsycopg2-binarypymysqlsqlalchemy>=1.4.39,<2sqlglottenacity等,因此一条命令即可覆盖两种模式:

# Thrift/Kerberos 支持 pip install 'acryl-datahub[hive-metastore]' # 仅 SQL 模式、按后端数据库补装驱动 pip install 'acryl-datahub[hive]' psycopg2-binary # PostgreSQL Metastore pip install 'acryl-datahub[hive]' PyMySQL # MySQL Metastore

从源码结构看,两种模式在 hive_metastore_config.py 中由HiveMetastoreConnectionType枚举(sql/thrift,默认sql)区分;hive_metastore_source.py 的构造函数依据它选择SQLAlchemyDataFetcherThriftDataFetcher,两者共用HiveDataFetcher协议与同一套HiveMetadataProcessor生成 WorkUnit——这也是两种模式输出实体保持一致的原因。

三、SQL 模式(默认)完整配置

3.1 基础配方

以下配方即仓库自带的 hive-metastore_recipe.yml 的 SQL 部分(该文件同时完整给出 Thrift 模式的三种注释示例,建议直接查阅):

# SQL Mode (Default) - Direct database connection source: type: hive-metastore config: # Hive metastore DB connection host_port: localhost:5432 database: metastore # specify the schema where metastore tables reside schema_pattern: allow: - "^public" # credentials username: user # optional password: pass # optional #scheme: 'postgresql+psycopg2' # set this if metastore db is using postgres #scheme: 'mysql+pymysql' # set this if metastore db is using mysql, default if unset # Filter databases using pattern-based filtering #database_pattern: # allow: # - "^db1$" # deny: # - "^test_.*" # Storage Lineage Configuration (Optional) # Enables lineage between Hive tables and their underlying storage locations #emit_storage_lineage: false # Set to true to enable storage lineage #hive_storage_lineage_direction: upstream # 'upstream' (storage -> Hive) or 'downstream' (Hive -> storage) #include_column_lineage: true # Set to false to disable column-level lineage #storage_platform_instance: "prod-hdfs" # Optional: platform instance for storage URNs sink: # sink configs

3.2 核心参数说明(结合源码默认值)

对照 hive_metastore_config.py 中HiveMetastore配置类的字段定义:

参数类型默认值说明
connection_typeenumsqlsql(直连数据库)或thrift(HMS Thrift API)
host_portstringlocalhost:3306SQL 模式为数据库地址端口;Thrift 模式为 HMS 端点(如hms.company.com:9083
databasestring-Metastore 后端库名(一般为metastore);也用于 SQL 过滤上下文
metastore_db_namestringNone向后兼容字段;未设置时回退使用database
schemestringmysql+pymysqlSQLAlchemy scheme;PostgreSQL 需显式设为postgresql+psycopg2
username/passwordstring/secret-数据库账号,支持${ENV_VAR}环境变量
schema_patternAllowDeny全允许过滤 Metastore 内库(数据库)的正则
database_pattern/table_patternAllowDeny全允许库/表级正则过滤,Thrift 与 SQL 模式通用
modeenumhive平台模式:hive/presto/presto-on-hive/trino,决定 dataset URN 的 dataPlatform
use_catalog_subtypebooltrue容器子类型用Catalog(True)或Database(False)
use_dataset_pascalcase_subtypeboolfalsedataset 子类型用Table/View(True)或table/view(False)
include_view_lineagebooltrue通过解析视图定义抽取视图血缘
include_catalog_name_in_idsboolfalse将 catalog 名纳入 dataset URN(HMS 3.x 多 catalog 场景)
emit_storage_lineage-见下节来自HiveStorageLineageConfigMixin的存储血缘参数
stateful_ingestion-None启用后支持陈旧实体删除(删除检测)
optionsdict-透传给 SQLAlchemy 的connect_args(SSL 等)及连接池参数

一个值得注意的实现细节:HiveMetastore继承自BasicSQLAlchemyConfig,SQL 连接 URL 由 hive_metastore_config.py 的get_sql_alchemy_url()通过make_sqlalchemy_uri()生成,优先使用metastore_db_name,否则回退database。这解释了为什么 PostgreSQL 下通常要把database设为metastore、并用schema_pattern指定public

3.3 数据库权限准备

DataHub 使用的数据库账号只需只读权限。官方文档给出了两种后端的建权 SQL(引自 hive-metastore_pre.md):

PostgreSQL:

-- Create a dedicated read-only user for DataHub CREATE USER datahub_user WITH PASSWORD 'secure_password'; -- Grant connection privileges GRANT CONNECT ON DATABASE metastore TO datahub_user; -- Grant schema usage GRANT USAGE ON SCHEMA public TO datahub_user; -- Grant SELECT on metastore tables GRANT SELECT ON ALL TABLES IN SCHEMA public TO datahub_user; -- Grant SELECT on future tables (for metastore upgrades) ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO datahub_user;

MySQL:

-- Create a dedicated read-only user for DataHub CREATE USER 'datahub_user'@'%' IDENTIFIED BY 'secure_password'; -- Grant SELECT privileges on metastore database GRANT SELECT ON metastore.* TO 'datahub_user'@'%'; -- Apply changes FLUSH PRIVILEGES;

DataHub 实际查询的 Metastore 表如下,建议对全部 Metastore 表授予SELECT以保证跨 Hive 版本兼容:

用途
DBS数据库/schema 信息
TBLS表元数据
TABLE_PARAMS表属性(含视图定义)
SDS存储描述符(location、格式)
COLUMNS_V2列元数据
PARTITION_KEYS分区信息
SERDES序列化/反序列化信息

3.4 认证与 SSL 示例

标准 PostgreSQL 连接:

source: type: hive-metastore config: host_port: metastore-db.company.com:5432 database: metastore username: datahub_user password: ${METASTORE_PASSWORD} scheme: "postgresql+psycopg2"

PostgreSQL SSL:

options: connect_args: sslmode: require sslrootcert: /path/to/ca-cert.pem

MySQL 标准连接(mysql+pymysql为未设置scheme时的默认值)与 SSL:

source: type: hive-metastore config: host_port: metastore-db.company.com:3306 database: metastore username: datahub_user password: ${METASTORE_PASSWORD} scheme: "mysql+pymysql" options: connect_args: ssl: ca: /path/to/ca-cert.pem cert: /path/to/client-cert.pem key: /path/to/client-key.pem

云托管数据库的两个要点:AWS RDS 要求sslmode: require;Azure Database for PostgreSQL/MySQL 的username需要带@server-name后缀(如datahub_user@metastore-server),完整示例见 hive-metastore_pre.md 的 Authentication 一节。

四、Thrift 模式实战

当无法访问 Metastore 数据库、仅 HMS Thrift API(9083 端口)可达、或环境要求 Kerberos 时使用connection_type: thrift

4.1 前置检查与依赖

  1. 运行摄取的主机可连通 HMS 9083 端口(telnet hms.company.com 9083验证);
  2. HMS 服务正在运行并接受 Thrift 连接;
  3. Kerberos 环境需先持有有效票据:kinit -kt /path/to/keytab user@REALM,用klist验证。

依赖:pip install 'acryl-datahub[hive-metastore]',Kerberos 场景另装pip install thrift-sasl pyhive[hive-pure-sasl]acryl-pyhivekerberos包已包含在 extras 内,见 pyproject.toml)。

4.2 Thrift 配置参数表

选项类型默认必填说明
connection_typestringsqlThrift 时必填设为thrift启用 Thrift 模式
host_portstring-HMS 主机端口,如hms.company.com:9083
use_kerberosbooleanfalse启用 Kerberos/SASL 认证
kerberos_service_namestringhiveKerberos 服务主体名(可用klist -k /etc/hive/hive.keytab确认)
kerberos_hostname_overridestring-负载均衡器场景下覆盖 Kerberos 主体构造用的主机名
kerberos_qopstringauthQOP 级别:auth/auth-int/auth-conf
timeout_secondsint60连接超时(秒)
max_retriesint3瞬态失败的最大重试次数
catalog_namestring-HMS 3.x catalog 名(如spark_catalog
include_catalog_name_in_idsbooleanfalse是否在 dataset URN 中包含 catalog
database_pattern/table_patternAllowDeny-正则过滤(Thrift 模式仅支持模式过滤,不支持 WHERE 子句)

以上默认值均与 hive_metastore_config.py 中对应字段的Field(default=...)一致(如kerberos_service_name="hive"kerberos_qop="auth"timeout_seconds=60)。

4.3 典型配置

最小配置(无 Kerberos):

source: type: hive-metastore config: connection_type: thrift host_port: hms.company.com:9083 use_kerberos: false sink: type: datahub-rest config: server: http://localhost:8080

Kerberos 认证 + 负载均衡器:

source: type: hive-metastore config: connection_type: thrift host_port: hms-lb.company.com:9083 # Load balancer address use_kerberos: true kerberos_service_name: hive kerberos_hostname_override: hms-master.company.com # Actual HMS hostname

Kerberos QOP 必须与服务端hadoop.rpc.protection匹配:

hadoop.rpc.protectionkerberos_qop含义
authenticationauth仅认证(默认)
integrityauth-int认证 + 完整性校验
privacyauth-conf认证 + 完整性 + 加密

4.4 Thrift 模式的限制

  • 无 Presto/Trino 视图血缘:视图 SQL 解析依赖 SQL 模式下的数据库查询;
  • 无 WHERE 子句过滤:只能用database_pattern/table_pattern
  • 需要有效 Kerberos 票据:票据无法写入配置,必须在摄取前kinit
  • HMS 版本兼容:文档标注已在 HMS 2.x 与 3.x 上测试。

源码层面这一点有硬性校验:hive_metastore_config.py 的validate_thrift_settings校验器会在connection_type: thriftmode不是hive时直接抛错("Thrift mode only supports 'mode: hive' because presto/trino modes require direct database queries to extract view definitions"),避免配置无效组合。连接实现位于 hive_thrift_client.py,test_connection(即datahub ingest的连接测试能力)会实际调用get_all_databases()并报告发现的数据库数量。

4.5 已废弃的 WHERE 子句选项

tables_where_clause_suffixviews_where_clause_suffixschemas_where_clause_suffix三个旧参数因 SQL 注入风险已废弃。源码中的validate_deprecated_where_clause_options校验器会在它们被设置时直接报错,提示改用database_pattern/table_pattern。如果你从旧版配方迁移,请删除这些字段,否则配置校验阶段即失败。

五、核心能力详解

5.1 存储血缘(Storage Lineage)

开启emit_storage_lineage: true后,连接器会在 Hive 表与其底层存储(S3/HDFS/Azure/GCS 等)之间建立血缘,参数与 Hive 连接器一致:

参数类型默认说明
emit_storage_lineagebooleanfalse存储血缘总开关
hive_storage_lineage_directionstring"upstream"upstream(存储 → Hive)或downstream(Hive → 存储)
include_column_lineagebooleantrue列级血缘(存储路径 → Hive 列)
storage_platform_instancestringNone存储 URN 的平台实例,如prod-s3dev-hdfs

支持的存储平台(协议前缀):Amazon S3(s3://s3a://s3n://)、HDFS(hdfs://)、GCS(gs://)、Azure Blob(wasb://wasbs://)、ADLS(adl://abfs://abfss://)、dbfs://、本地file://

多集群环境的最佳实践是同时区分表侧与存储侧的平台实例:

source: type: hive-metastore config: platform_instance: "prod-hive" # Hive 表 storage_platform_instance: "prod-hdfs" # 存储位置 emit_storage_lineage: true

实现上,这些参数由 storage_lineage.py 中的HiveStorageLineageConfigMixin提供并被HiveMetastore配置类混入,因此与hive连接器(HiveServer2 路径)共享同一套解析逻辑。

5.2 Presto/Trino 视图支持(SQL 模式)

Hive Metastore 连接器的一个突出优势:Presto/Trino 视图的定义(JSON 形式)持久化在 Metastore 的TABLE_PARAMS表中,连接器可以直接读取并解析。工作流程:

  1. 视图识别:检查TABLE_PARAMS中的 Presto/Trino 视图定义(参数键presto_view);
  2. 视图解析:解析视图 JSON,提取原始 SQL 文本、引用表、列元数据与类型;
  3. 血缘抽取:用sqlglot解析 SQL,建立 表 → 视图 的血缘;
  4. 存储血缘串联:若同时启用emit_storage_lineage,还能形成S3 Bucket → Hive Table → Presto View的完整链条。

该能力无需额外配置,只要 Metastore 中存在 Presto/Trino 视图即自动生效;启用后,源码 hive_metastore_source.py 会构造SqlParsingAggregator(platform 取自mode,默认hive,可通过mode: presto-on-hive等切换平台归属),在 WorkUnit 产出阶段把聚合出的血缘 MCP 一并发出。限制:支持 Presto 0.200+ 与 Trino 视图格式;跨库引用仅在同 Metastore 内抽取;非标准 Presto/Trino 函数可能解析不全。

5.3 Schema 过滤

大型 Metastore 部署建议用模式过滤收敛范围。库级过滤(SQL 模式):

source: type: hive-metastore config: # ... connection config ... # Only ingest from specific databases schema_pattern: allow: - "^production_.*" # All databases starting with production_ - "analytics" # Specific database deny: - ".*_test$" # Exclude test databases

数据库/表级正则过滤(两种连接模式通用):

database_pattern: allow: - "^production_db$" - "^analytics_db$" deny: - "^test_.*" - ".*_staging$" table_pattern: allow: - ".*" deny: - "^tmp_.*"

过滤语义由配置类引用的AllowDenyPattern实现(allow 优先于 deny),Thrift 模式下这是唯一的过滤手段。

5.4 有状态摄取与删除检测

开启 stateful ingestion 后,DataHub 会跟踪上次摄取的实体集合,移除已删除表/视图对应的陈旧元数据:

stateful_ingestion: enabled: true remove_stale_metadata: true

源码中HiveMetastoreSource继承StatefulIngestionSourceBasestateful_ingestion字段类型为StatefulStaleMetadataRemovalConfig,与 README 中“stateful deletion detection”的能力描述对应。

5.5 复杂类型 Schema

连接器支持 struct、map、array 等复杂类型的 Schema 字段输出;simplify_nested_field_paths(默认false)控制是否将 v2 嵌套字段路径简化为 v1 风格(Union/Array 类型回退 v2)。

六、性能考量与优化

由于 SQL 模式直连数据库、批量查询且不执行 Hive 查询,官方文档给出的近似对比(来自 hive-metastore_post.md):

  • 10 库 1000 表:Metastore 约 2 分钟 vs HiveServer2 约 15 分钟;
  • 100 库 10,000 表:约 15 分钟 vs 约 2 小时。

优化手段:

  1. 连接池调参(SQLAlchemy 默认池,超大部署可调):

    options: pool_size: 10 max_overflow: 20
  2. schema_pattern收敛范围,减少查询时间;

  3. 启用 stateful ingestion,只处理增量变化;

  4. 不需要列级血缘时关闭include_column_lineage: false,可提速。

网络方面:到 Metastore 数据库的低延迟很关键,带宽需求很小(只传元数据),并确认数据库能承受额外的只读连接。

七、限制与兼容性边界

  • Hive 版本:已在 Hive 1.x、2.x、3.x 的 Metastore schema 上测试;不同版本 schema 存在细微差异;
  • 自定义表:组织自行添加的 Metastore 表不会被处理;
  • 数据库支持:PostgreSQL、MySQL、MariaDB;Oracle、MSSQL 未测试;Derby(内嵌单用户)不推荐;
  • 视图血缘解析:简单 SQL 全支持,复杂 SQL 尽力解析,个别边缘情况可能不完整;
  • 权限:只读 SELECT 即可,从不执行 INSERT/UPDATE/DELETE,读操作不获取 Metastore 锁;
  • 存储血缘限制:仅对定义了存储位置的表生效;不支持临时表;分区级血缘聚合到表级。

八、故障排查

通用问题(引自 hive-metastore_post.md):

  1. 500+ 列的大表处理较慢(Metastore 查询复杂度所致);
  2. 旧版 Hive 视图定义可能非 UTF-8 编码,导致解析问题;
  3. 大小写:PostgreSQL Metastore 标识符大小写敏感,MySQL 默认不敏感;DataHub 会自动将 URN 小写化以保持一致;
  4. 摄取期间 Metastore 被并发写入时,部分元数据可能不一致。

连接失败(Could not connect to metastore database:核对host_portdatabaseschemetelnet <host> <port>验证网络;PostgreSQL 检查pg_hba.conf是否放行你的 IP,MySQL 检查my.cnfbind-address

认证失败(Authentication failed/Access denied:核对账号密码;确认账号有 CONNECT/LOGIN 权限;Azure 场景确认用户名带@server-name后缀;查数据库日志。

部分表缺失:确认账号对所有 Metastore 表有 SELECT;检查是否被schema_pattern/database_pattern/table_pattern过滤;可直接查库验证表存在:

SELECT d.name as db_name, t.tbl_name as table_name, t.tbl_type FROM TBLS t JOIN DBS d ON t.db_id = d.db_id WHERE d.name = 'your_database';

Presto/Trino 视图不出现:确认视图定义落在 Metastore 中:

SELECT d.name as db_name, t.tbl_name as view_name, tp.param_value FROM TBLS t JOIN DBS d ON t.db_id = d.db_id JOIN TABLE_PARAMS tp ON t.tbl_id = tp.tbl_id WHERE t.tbl_type = 'VIRTUAL_VIEW' AND tp.param_key = 'presto_view' LIMIT 10;

并检查摄取日志中的解析错误、视图 JSON 是否合法。

存储血缘不出现:确认emit_storage_lineage: true;查表在 Metastore 中是否有location

SELECT d.name as db_name, t.tbl_name as table_name, s.location FROM TBLS t JOIN DBS d ON t.db_id = d.db_id JOIN SDS s ON t.sd_id = s.sd_id WHERE s.location IS NOT NULL LIMIT 10;

再看日志中Failed to parse storage location类告警。

摄取过慢:用模式过滤收敛范围、启用 stateful ingestion、检查 Metastore 表索引与查询性能、降低网络延迟、必要时关闭列级血缘。

此外,HiveMetastoreSource实现了TestableSource,可借助 DataHub 的连接测试能力预先验证:SQL 模式会实际列出 schema(fetch_schema_rows())并报告数量,Thrift 模式列出数据库;失败时针对 Kerberos(提示kinit)、连接被拒、超时等情况给出对应的修复建议,见 hive_metastore_source.py 的test_connection实现。

九、小结

DataHub 的hive-metastore连接器以一份配置统一覆盖了两大访问路径:有数据库读权限的环境优先 SQL 模式,享受批量查询的性能与 Presto/Trino 视图解析能力;只能走 Thrift API 的环境则用 Thrift 模式,配合 Kerberos(含 QOP 与 LB 主机名覆盖)完成认证。配合database_pattern/table_pattern过滤、stateful ingestion 删除检测、存储血缘与多platform_instance区分,可以支撑多集群、多环境的 Hive 元数据体系化治理。完整可复制的配置基线以 hive-metastore_recipe.yml 为准,参数语义可对照 hive_metastore_config.py 逐项核对。

【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 19:42:40

安卓GSI通用镜像刷入与第三方ROM移植Bug修复指南

玩安卓玩到一定阶段&#xff0c;早晚会碰到那道分水岭&#xff1a;原厂固件用腻了&#xff0c;社区里的整包ROM又迟迟等不到人适配自己手里的冷门机型。这时候很多人会把目光投向GSI&#xff0c;也就是通用系统镜像。它的思路很直接&#xff0c;把system分区做成一份相对通用的…

作者头像 李华
网站建设 2026/9/18 19:37:03

Altium Designer 20新建工程全攻略:从零搭建PCB设计项目管理基础

说实话&#xff0c;我第一次用Altium Designer 20的时候&#xff0c;最头疼的不是画原理图&#xff0c;也不是布PCB&#xff0c;而是怎么把一个正式的工程从头建起来。网上教程多&#xff0c;但很多都直接从“新建”按钮开始&#xff0c;讲完保存就完了&#xff0c;工程里那一堆…

作者头像 李华
网站建设 2026/9/18 19:35:03

沉降观测与基坑变形监测方案:精度等级、预警值及数据分析指南

简介&#xff1a;这是一份面向建筑工程测量、施工管理与岩土工程人员的沉降观测与基坑变形监测方案文档&#xff0c;内容源于某恒大城5#、6#地块住宅及商业建筑项目。方案系统覆盖测区概况、工作任务、测量技术依据、水准基点与沉降监测点布设等模块&#xff0c;详细列出各楼栋…

作者头像 李华
网站建设 2026/9/18 19:31:53

CANN opbase 算子参数值校验日志宏 OP_LOGE_FOR_INVALID_VALUE 使用指南

CANN opbase 算子参数值校验日志宏 OP_LOGE_FOR_INVALID_VALUE 使用指南 【免费下载链接】opbase 本项目是CANN算子库的基础框架库&#xff0c;为算子提供公共依赖文件和基础调度能力。 项目地址: https://gitcode.com/cann/opbase 导读 OP_LOGE_FOR_INVALID_VALUE 是 …

作者头像 李华
网站建设 2026/9/18 19:31:25

Keil工程自动化:Python解析uvprojx实现源文件同步

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华