metadata-ingestion/docs/sources/hana/hana_post.md
Use the Important Capabilities table above as the source of truth for supported features.
CREATE VIEW definition via the SqlParsingAggregator and the postgres sqlglot dialect (HANA SQL is close enough to ANSI for view definitions).include_calculation_views: true) — column-level lineage is parsed from the calc view's XML in _SYS_REPO.ACTIVE_OBJECT. The parser handles ProjectionView, JoinView, AggregationView, UnionView, RankView, and SqlScriptView nodes. For SqlScriptView (calculationScenarioType="SCRIPT_BASED") views the parser also extracts table-level upstreams from the embedded HANA SQLScript body — column-level lineage from SQLScript is out of scope.include_stored_procedures: true) — each procedure's body is parsed for table-level reads/writes and procedure-to-procedure lineage; the result is attached to the procedure's DataJob as input/output datasets.include_query_usage: true) — query history from _SYS_STATISTICS.HOST_SQL_PLAN_CACHE is fed to the aggregator as ObservedQuery entries. Each row represents one (statement_hash, last_execution_timestamp) observation — i.e. one distinct moment a cached plan was executed within [start_time, end_time]. The aggregator derives both query-driven lineage and (with include_usage_stats: true) DatasetUsageStatistics rollups bucketed by bucket_duration.When include_query_usage: true:
(statement_hash, last_execution_timestamp) so a steady-state query that has been observed by many statistics-service snapshots does not double-count. As a consequence, multiple executions that fall inside one snapshot window are observed as a single event; absolute execution counts are therefore a floor, not an exact count.SYS and any _SYS_* user) and monitoring traffic against SYS / _SYS_* schemas are filtered out at the SQL layer.usage_max_queries caps the number of distinct observations returned per ingestion run.bucket_duration, start_time, and end_time come from BaseUsageConfig and behave the same as in Snowflake / Redshift.Profiling is implemented via SQLAlchemySource's standard profiler and is opt-in (profiling.enabled: true). HANA's column-store makes most profiling queries cheap, but you can still cap the per-table sample size via profile_table_level_only or profile.sample_size for very wide / large tables.
hdbcli driver on aarch64/arm64 — SAP does not ship aarch64 wheels for hdbcli. Run ingestion under an x86_64 interpreter on Apple Silicon and Graviton hosts.include_calculation_views: true requires the SAP HANA XS-classic repository (_SYS_REPO), which is not present on SAP HANA Cloud or HDI-only deployments. See the deployment-compatibility table in the prerequisites section for the full feature matrix; calc-view extraction warns and skips rather than failing on incompatible tenants.SqlScriptView whose body only CALLs another procedure has no parsable FROM/JOIN references, so no table lineage is emitted for that view. The called procedure itself is still ingested (if include_stored_procedures is on) and reachable through procedure lineage.SqlScriptView nodes and stored procedures) is intentionally out of scope; sqlglot's HANA support is too partial for reliable column tracing._SYS_STATISTICS.HOST_SQL_PLAN_CACHE snapshots the plan cache every few minutes, and multiple executions within one snapshot window collapse to one observation. Frequency rankings (top tables, top users) remain accurate; absolute totals are conservative. Also, STATEMENT_STRING is truncated at the HANA-side sql_text_length parameter (default 5000 chars), so extremely long statements may parse partially.[89018] _SYS_REPO.ACTIVE_OBJECT not foundThe tenant does not have SAP HANA XS-classic repository content. Either disable calc-view extraction (include_calculation_views: false) or migrate to a tenant that has the repository deployed.
[258] insufficient privilege on SYS.PROCEDURES or _SYS_REPO.ACTIVE_OBJECTGrant SELECT on the relevant system view to the ingestion user. The connector logs a warning and continues with the rest of the extraction path; failures here never abort ingestion.
_SYS_BIC). Unactivated design-time objects are skipped.Failed to parse calculation view — that points at a parse failure (the source XML may be malformed, or it may be a SqlScriptView where column-level lineage is unsupported).SqlScriptView views, confirm the body uses fully-qualified, double-quoted references (FROM "SCHEMA"."TABLE"); HANA SQLScript table variables (T_FREQ = SELECT …) are intentionally skipped.hdbcli import errorImportError: dlopen(...) ... incompatible architecture
You are running an aarch64 Python interpreter. Switch to an x86_64 interpreter (Rosetta or an x86_64 container).
[258] insufficient privilege against _SYS_STATISTICS.HOST_SQL_PLAN_CACHEGrant the MONITORING role (or CATALOG READ system privilege) to the ingestion user. The connector logs a warning and continues — usage extraction degrades to a no-op while the rest of metadata ingestion completes normally.
SELECT * FROM SYS.M_SERVICES WHERE SERVICE_NAME = 'statisticsserver'). SAP note 2147247 has full diagnostics._SYS_STATISTICS.HOST_SQL_PLAN_CACHE is populated (SELECT COUNT(*) FROM _SYS_STATISTICS.HOST_SQL_PLAN_CACHE). Newly-provisioned tenants take a few minutes to seed the first snapshot.start_time: "-7 days" for a longer lookback.