clickzetta-semantic-model-generator 1.0.10__tar.gz → 1.0.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/PKG-INFO +1 -1
  2. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/pyproject.toml +1 -1
  3. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/clickzetta_utils/clickzetta_connector.py +62 -11
  4. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/LICENSE +0 -0
  5. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/README.md +0 -0
  6. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/__init__.py +0 -0
  7. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/clickzetta_utils/env_vars.py +0 -0
  8. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/clickzetta_utils/utils.py +0 -0
  9. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/data_processing/__init__.py +0 -0
  10. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/data_processing/cte_utils.py +0 -0
  11. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/data_processing/cte_utils_test.py +0 -0
  12. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/data_processing/data_types.py +0 -0
  13. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/data_processing/proto_utils.py +0 -0
  14. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/generate_model.py +0 -0
  15. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/llm/__init__.py +0 -0
  16. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/llm/dashscope_client.py +0 -0
  17. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/llm/enrichment.py +0 -0
  18. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/llm/progress_tracker.py +0 -0
  19. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/output_models/.keep +0 -0
  20. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/protos/semantic_model.proto +0 -0
  21. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/protos/semantic_model_pb2.py +0 -0
  22. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/protos/semantic_model_pb2.pyi +0 -0
  23. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/relationships/__init__.py +0 -0
  24. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/relationships/discovery.py +0 -0
  25. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/clickzetta_connector_test.py +0 -0
  26. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/cte_utils_test.py +0 -0
  27. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/generate_model_classification_test.py +0 -0
  28. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/llm_enrichment_test.py +0 -0
  29. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/relationship_discovery_test.py +0 -0
  30. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/relationships_filters_test.py +0 -0
  31. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/samples/validate_yamls.py +0 -0
  32. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/utils_test.py +0 -0
  33. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/validate_model_test.py +0 -0
  34. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/tests/yaml_to_semantic_model_test.py +0 -0
  35. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/validate/context_length.py +0 -0
  36. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/validate/keywords.py +0 -0
  37. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/validate/schema.py +0 -0
  38. {clickzetta_semantic_model_generator-1.0.10 → clickzetta_semantic_model_generator-1.0.12}/semantic_model_generator/validate_model.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: clickzetta-semantic-model-generator
3
- Version: 1.0.10
3
+ Version: 1.0.12
4
4
  Summary: Curate a Semantic Model for ClickZetta Lakehouse
5
5
  License: Apache Software License; BSD License
6
6
  Author: qililiang
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "clickzetta-semantic-model-generator"
3
- version = "1.0.10"
3
+ version = "1.0.12"
4
4
  description = "Curate a Semantic Model for ClickZetta Lakehouse"
5
5
  authors = ["qililiang <qililiang@clickzetta.com>"]
6
6
  license = "Apache Software License; BSD License"
@@ -491,19 +491,64 @@ def _fetch_columns_via_show(
491
491
  table_token = str(table_name).strip()
492
492
  if not table_token:
493
493
  continue
494
- qualified_table = join_quoted_identifiers(
494
+
495
+ identifier_candidates: List[str] = []
496
+ fully_qualified = join_quoted_identifiers(
495
497
  *(part for part in (catalog, schema_token, table_token) if part)
496
498
  )
497
- query = f"SHOW COLUMNS IN {qualified_table}"
498
- try:
499
- df = session.sql(query).to_pandas()
500
- except Exception as exc:
501
- logger.debug(
502
- "SHOW COLUMNS fallback failed for {}: {}", qualified_table, exc
503
- )
504
- continue
499
+ if fully_qualified:
500
+ identifier_candidates.append(fully_qualified)
501
+ schema_qualified = (
502
+ join_quoted_identifiers(schema_token, table_token)
503
+ if schema_token
504
+ else ""
505
+ )
506
+ if schema_qualified:
507
+ identifier_candidates.append(schema_qualified)
508
+ bare_identifier = join_quoted_identifiers(table_token)
509
+ if bare_identifier:
510
+ identifier_candidates.append(bare_identifier)
511
+
512
+ df = pd.DataFrame()
513
+ df_source = ""
514
+ for identifier in identifier_candidates:
515
+ query = f"SHOW COLUMNS IN {identifier}"
516
+ try:
517
+ df = session.sql(query).to_pandas()
518
+ df_source = "SHOW COLUMNS"
519
+ except Exception as exc:
520
+ logger.debug(
521
+ "SHOW COLUMNS fallback failed for {}: {}", identifier, exc
522
+ )
523
+ df = pd.DataFrame()
524
+ if df.empty:
525
+ describe_query = f"DESCRIBE TABLE {identifier}"
526
+ try:
527
+ describe_df = session.sql(describe_query).to_pandas()
528
+ except Exception as exc:
529
+ logger.debug(
530
+ "DESCRIBE TABLE fallback failed for {}: {}", identifier, exc
531
+ )
532
+ describe_df = pd.DataFrame()
533
+ if not describe_df.empty:
534
+ df = describe_df
535
+ df_source = "DESCRIBE TABLE"
536
+ if not df.empty:
537
+ break
505
538
  if df.empty:
506
539
  continue
540
+ if df_source == "DESCRIBE TABLE":
541
+ if "KIND" in df.columns:
542
+ df = df[df["KIND"].astype(str).str.upper() == "COLUMN"]
543
+ rename_map = {}
544
+ if "NAME" in df.columns:
545
+ rename_map["NAME"] = "COLUMN_NAME"
546
+ if "TYPE" in df.columns:
547
+ rename_map["TYPE"] = "DATA_TYPE"
548
+ if rename_map:
549
+ df = df.rename(columns=rename_map)
550
+ if df.empty:
551
+ continue
507
552
  df.columns = [str(col).upper() for col in df.columns]
508
553
  schema_col = next(
509
554
  (col for col in ("TABLE_SCHEMA", "SCHEMA_NAME") if col in df.columns), None
@@ -527,8 +572,14 @@ def _fetch_columns_via_show(
527
572
  )
528
573
 
529
574
  normalized = pd.DataFrame()
530
- normalized[_TABLE_SCHEMA_COL] = df[schema_col] if schema_col else table_schema
531
- normalized[_TABLE_NAME_COL] = df[table_col] if table_col else table_name
575
+ normalized[_TABLE_SCHEMA_COL] = (
576
+ df[schema_col]
577
+ if schema_col
578
+ else (schema_token or table_schema or "")
579
+ )
580
+ normalized[_TABLE_NAME_COL] = (
581
+ df[table_col] if table_col else table_token
582
+ )
532
583
  normalized[_COLUMN_NAME_COL] = (
533
584
  df[column_col] if column_col else df.index.astype(str)
534
585
  )