Oracle上dbt的近似关系匹配

rjee0c15  于 2023-04-29  发布在  Oracle
关注(0)|答案(1)|浏览(101)

我是dbt的新手,我不确定我的问题是代码问题还是我对工具的理解问题。所以我会尽我所能把这件事说出来,希望有人能给我指出正确的方向。

相关信息

  • 服务器:Oracle 12.2
  • 桌面操作系统:Windows 10
  • 制约因素:许多-这是一个高度监管的环境,所以我不能去IT部门要求对服务器进行任何更改。我要么自己想办法要么做点别的。

我正在尝试将我自己和我的团队过渡到使用dbt在我们的个人模式中构建可重复的数据库对象。我知道-我的模式不是一个数据集市。但这是我能做的。

设置

我创建了一个简单的例子来演示我的问题,叫做simple_test,它有一个单一的模型。
这是我在dbt_project中的内容。YML

name: 'simple_test'
version: '1.0.0'
config-version: 2

profile: 'issuers_datamart'

model-paths: ["models"]
analysis-paths: ["analyses"]
test-paths: ["tests"]
seed-paths: ["seeds"]
macro-paths: ["macros"]
snapshot-paths: ["snapshots"]

target-path: "target"  # directory which will store compiled SQL files
clean-targets:         # directories to be removed by `dbt clean`
  - "target"
  - "dbt_packages"

# Configuring models
# Full documentation: https://docs.getdbt.com/docs/configuring-models
models:
  simple_test:
    +materialized: table

是的,我希望我的模型物化为表。这些查询可能需要几个小时才能运行,因此视图对我的用例来说根本无效。
在模型中,我有一个文件properties.yml

name: "{{ env_var('DBT_ORACLE_SCHEMA') }}"
version: 2

models:
  - name: testy_mctest_face

最后,在模型中,我有一个文件testy_mctest_face.sql

select
   1 an_int
  ,'two' a_string
  ,3.3 a_float
from dual

查询确实有效。
事实上,当我运行dbt debug时,一切看起来都很棒。

18:40:50  Running with dbt=1.4.1
dbt version: 1.4.1
python version: 3.10.2
python path: C:\Users\ayc58\AppData\Local\Programs\Python\Python310\python.exe
os info: Windows-10-10.0.19045-SP0
Using profiles.yml file at C:\Users\ayc58\.dbt\profiles.yml
Using dbt_project.yml file at C:\Users\ayc58\Dev\simple_test\dbt_project.yml

18:40:51  oracle adapter: Running in thick mode
Configuration:
  profiles.yml file [OK found and valid]
  dbt_project.yml file [OK found and valid]

Required dependencies:
 - git [OK found]

Connection:
  user: ***
  database: ***
  schema: ***
  protocol: ***
  host: ***
  port: ***
  tns_name: ***
  service: ***
  connection_string: None
  shardingkey: []
  supershardingkey: []
  cclass: None
  purity: None
  retry_count: 1
  retry_delay: 3
  Connection test: [OK connection ok]

All checks passed!

然后我可以运行我的“模型”testy_mccest_face。

19:08:57  oracle adapter: Running in thick mode
19:08:57  Running with dbt=1.4.1
19:08:57  Unable to do partial parsing because a project dependency has been added
19:08:58  Found 1 model, 0 tests, 0 snapshots, 1 analysis, 325 macros, 0 operations, 1 seed file, 0 sources, 0 exposures, 0 metrics
19:08:58
19:09:06  Concurrency: 4 threads (target='dev')
19:09:06
19:09:06  1 of 1 START sql table model AYC58.testy_mctest_face ........................... [RUN]
19:09:10  1 of 1 OK created sql table model AYC58.testy_mctest_face ...................... [OK in 4.04s]
19:09:12
19:09:12  Finished running 1 table model in 0 hours 0 minutes and 13.71 seconds (13.71s).
19:09:12
19:09:12  Completed successfully
19:09:12
19:09:12  Done. PASS=1 WARN=0 ERROR=0 SKIP=0 TOTAL=1

我桌上的东西和我想的一样。
当我尝试使用dbt run -f重建模型时,我遇到了一个非常令人沮丧的问题:

19:09:31  oracle adapter: Running in thick mode
19:09:31  Running with dbt=1.4.1
19:09:31  Found 1 model, 0 tests, 0 snapshots, 1 analysis, 325 macros, 0 operations, 1 seed file, 0 sources, 0 exposures, 0 metrics
19:09:31  
19:09:38  Concurrency: 4 threads (target='dev')
19:09:38  
19:09:38  1 of 1 START sql table model AYC58.testy_mctest_face ........................... [RUN]
19:09:38  1 of 1 ERROR creating sql table model AYC58.testy_mctest_face .................. [ERROR in 0.06s]
19:09:40  
19:09:40  Finished running 1 table model in 0 hours 0 minutes and 8.95 seconds (8.95s).
19:09:40  
19:09:40  Completed with 1 error and 0 warnings:
19:09:40
19:09:40  Compilation Error in model testy_mctest_face (models\testy_mctest_face.sql)
19:09:40    When searching for a relation, dbt found an approximate match. Instead of guessing
19:09:40    which relation to use, dbt will move on. Please delete AYC58.TESTY_MCTEST_FACE, or rename it to be less ambiguous.
19:09:40    Searched for: AYC58.TESTY_MCTEST_FACE
19:09:40    Found: AYC58.TESTY_MCTEST_FACE
19:09:40
19:09:40    > in macro materialization_table_oracle (macros\materializations\table\table.sql)
19:09:40    > called by model testy_mctest_face (models\testy_mctest_face.sql)
19:09:40
19:09:40  Done. PASS=0 WARN=0 ERROR=1 SKIP=0 TOTAL=1

是的,table是存在的。但我对dbt的理解是,它会在构建新表时创建一个临时表,删除旧表,并将临时表重命名为最终名称。相反,它只是被挂起。

  • 将我的模式名称改为小写,并将其硬编码到模型中。没有区别。
  • 我已经尝试了quoting的所有不同排列,似乎没有任何区别。
  • 此外,DBT Oracle reference materials没有提到任何需要这样做。
  • 现有SO问题不适合。
  • Example:我已经在使用dbt run -f
  • Example:我不认为我有任何拼写错误。我真实的的项目没有那么愚蠢的拼写。
  • 我已经准备好了DBT文档。我甚至试着用预钩来固定。我对DBT的理解是,这应该是不必要的,但我还是尝试了。

我的理解/期望是DBT会用一个临时名称创建我的表,然后用我的新表替换我的旧表,因为我使用的是dbt run -f。我甚至查看了Oracle特定的宏,虽然我不理解那里的所有内容,但这就是它看起来的样子。

liwlm1x9

liwlm1x91#

我在我的组织中有完全相同的配置,我正在与同样的问题作斗争。在我的案例中,解决方案是将它添加到dbt_project中。yml文件:

quoting:
  database: true

相关问题