标签: etl

ETL 操作 - 返回主键

我正在使用 Talend 来填充数据仓库。我的工作是将客户数据写入维度表,将交易数据写入事实表。事实表上的代理键 (p_key) 是自动递增的。当我插入一个新客户时,我需要我的事实表来反映相关客户的 ID。

正如我提到的,我的 p_key 是 auto_incrementing,所以我不能只为 p_key 插入一个任意值。

关于如何在我的维度表中插入一行并仍然检索主键以在我的事实记录中引用的任何想法?

更多信息:

如果传入的数据未标准化怎么办?例如,我有一个包含以下数据的 csv:

order #   date        total customer# first_name last_name
111       1/2/2010    500    101      John        Smith     
222       1/3/2010    600    101      John        Smith
Run Code Online (Sandbox Code Playgroud)

显然,我希望客户信息出现在维度表中,而交易数据出现在事实表中:

dimension
101  john smith

fact
111       1/3/2010
222       1/3/2010
Run Code Online (Sandbox Code Playgroud)

正如您所提到的,维度表的键将是自动递增的。事实表需要引用这个键。您如何设计 etl 作业以便在插入后返回代理键?

此外,如果对客户数据进行重复数据删除(如上所述),您将如何处理密钥?

etl data-warehouse talend

2
推荐指数
1
解决办法
2185
查看次数

用pentahokettle下载文件

我正在尝试创建一个可以通过 HTTP 下载多个文件的作业。这些文件的列表在 MySQL 表中。我使用以下步骤创建了一个主要作业:启动、设置变量、文件列表(我创建的转换)、下载(我创建的作业)和成功。

转换 FILELIST 包含以下步骤:表输入和将行复制到结果(此转换与数据库通信并将 URL 列表提供给主任务)。任务下载包含以下步骤:开始、http、成功(此任务应将文件下载到我的计算机)。

这一切都行不通,为什么?有人知道做同样事情的更好方法吗?

etl pentaho kettle

2
推荐指数
1
解决办法
8418
查看次数

哪个是用作 ETL 分隔符的最佳字符?

我最近从 Informix DB 卸载了一个客户表,但由于客户名称列包含非转义的竖线(管道符号)字符,这是源数据库中的默认 DBDELIMITER,因此有几行被拒绝。我发现他们的客户表单中的字段有一个输入掩码,允许输入任何字母数字字符,其中可以包括任何字母、数字或符号。因此,我说服用户对该列运行全面更新,将管道符号更改为分号。我还发现其他行在不同的列中包含星号和逗号。我可以想象如果这张表以 csv 格式卸载会发生什么,或者星号会造成什么损害!

定义为分隔符的最佳字符是什么?如果表格已经被管道、逗号、星号、制表符、反斜杠等污染,清理它们的最佳方法是什么?

database format informix etl delimiter

2
推荐指数
1
解决办法
1万
查看次数

SSIS 表达式

我有以下 SQL 代码

update ETL.TempRH 
set resourcer = IF(
               qualification IN (47,49,50,164,187,252,185,239,251),
                   "resourcer"  , type_Staff);
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为 ssis 表达式。我试过这个,但没有用。

(qualification = 47  || 
 qualification = 49  ||  
 qualification = 50  || 
 qualification = 164 || 
 qualification = 187 || 
 qualification = 252 || 
 qualification = 185 || 
 qualification = 239 || 
 qualification = 251 ? "resourcer" : type_Staff)
Run Code Online (Sandbox Code Playgroud)

sql sql-server expression ssis etl

2
推荐指数
1
解决办法
326
查看次数

如何在没有脚本的情况下使用ssis创建空的.txt文件

我的第一个任务是"文件系统任务".此任务创建一个文件夹.现在我无法弄清楚如何在文件系统任务刚创建的文件夹中创建空白文本文件.

我创建了2个变量 - mypath(c:\ sample\files)和myfilename(test.txt).

我已经创建了新的文件连接并从使用类型和文件中选择了创建文件选项:我已经给出了@[user::mypath] + @[user::myfilename].

但我得到的错误是:

包验证错误.

有人可以帮我如何创建一个新的文本文件?

filesystems variables ssis etl

2
推荐指数
1
解决办法
8100
查看次数

ssis 包中的“删除表”或“删除索引”中的语法错误

我正在使用 ssis 删除和重新创建 excel 文件。我使用了 ExecuteSQLTask 并编写了 sqlstatement

drop table 'Employee'
go
CREATE TABLE `Employee` (
`BusinessEntityID` INT,
`JobTitle` NVARCHAR(50),
`BirthDate` DATE,
`MaritalStatus` NVARCHAR(1),
`Gender` NVARCHAR(1),
`HireDate` DATE
)
Run Code Online (Sandbox Code Playgroud)

但是当我执行包时,我收到以下错误:

[执行 SQL 任务] 错误:执行查询“drop table 'Employee'”失败,出现以下错误:“DROP TABLE 或 DROP INDEX 中的语法错误。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接建立不正确。

请帮我修复它。

sql-server excel ssis etl

2
推荐指数
1
解决办法
1399
查看次数

使用 Pyspark 分解包含 Json 列表的列

我试图分解一个名为 phone 的列,如下所示的架构和内容:

(customer_external_id,StringType
phones,StringType)

customer_id    phones
x8x46x5        [{"phone" : "(xx) 35xx4x80"},{"phone" : "(xx) xxxx46605"}]
xx44xx5        [{"phone" : "(xx) xxx3x8443"}]
4xxxxx5        [{"phone" : "(xx) x6xx083x3"},{"areaCode" : "xx"},{"phone" : "(xx) 3xxx83x3"}]
xx6564x        [{"phone" : "(x3) x88xx344x"}]
xx8x4x0        [{"phone" : "(xx) x83x5x8xx"}]
xx0434x        [{"phone" : "(0x) 3x6x4080"},{"areaCode" : "xx"}]
x465x40        [{"phone" : "(6x) x6x445xx"}]
x0684x8        [{"phone" : "(xx) x8x88x4x4"},{"phone" : "(xx) x8x88x4x4"}]
x84x850        [{"phone" : "(xx) 55x56xx4"}]
x0604xx        [{"phone" : "(xx) x8x4xxx68"}]
4x6xxx0        [{"phone" : "(xx) x588x43xx"},{"phone" : "(xx) 5x6465xx"},{"phone" : "(xx) …
Run Code Online (Sandbox Code Playgroud)

python etl apache-spark pyspark

2
推荐指数
1
解决办法
4460
查看次数

为什么我所有的 Airflow dags 都落后了?

我现在正在设置 Airflow 并喜欢它,除了我的狗永远落后的事实。请参阅下图 - 这是在 2/19 UTC 时间 15:50 拍摄的,您可以看到,对于每个 dag,它们应该在上次运行和当前时间之间再运行一次(有一对夫妇,这不是真的 - 这些人目前已关闭)。有没有我错过的一些配置?

我的狗!

etl airflow airflow-scheduler

2
推荐指数
1
解决办法
1330
查看次数

胶水 AWS:调用 o60.getDynamicFrame 时发生错误

我已经定义了一个基本脚本来创建一个 DF,其中的数据来自我在 redshift 中的一个表。我运行了这个过程,但我一直在为一条我无法解释的消息而苦苦挣扎。

日志中的错误输出是:

"/mnt/yarn/usercache/root/appcache/application_1525803778049_0004/container_1525803778049_0004_01_000001/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling o60.getDynamicFrame. : java.lang.UnsupportedOperationException: empty.reduceLeft at scala.collection.

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame, DynamicFrameReader, DynamicFrameWriter, DynamicFrameCollection
from pyspark.sql.functions import lit
from awsglue.job import Job

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)

table = glueContext.create_dynamic_frame.from_options(connection_type="redshift", connection_options = 
    {"url": "jdbc:redshift://xxxxx.yyyyy.us-east-1.redshift.amazonaws.com:5439/db",
    "user": "yyyy",
    "password": "yyyyy",
    "dbtable": "schema.table_name", …
Run Code Online (Sandbox Code Playgroud)

etl amazon-redshift pyspark spark-dataframe aws-glue

2
推荐指数
1
解决办法
1万
查看次数

AWS Glue ETL 作业因“无法删除密钥:parquet-output/_temporary”而失败

我正在 Glue Crawler 生成的 CSV 数据表上运行 Glue ETL 作业。Crawler 访问具有以下结构的目录

   s3 
      -> aggregated output
         ->datafile1.csv
         ->datafile2.csv
     ->datafile3.csv
Run Code Online (Sandbox Code Playgroud)

这些文件被聚合到一个“聚合输出”表中,可以在 athena 中成功查询。

我正在尝试使用 AWS Glue ETL 作业将其转换为镶木地板文件。工作失败

"py4j.protocol.Py4JJavaError: An error occurred while calling 
o92.pyWriteDynamicFrame.
: java.io.IOException: Failed to delete key: parquet-output/_temporary"
Run Code Online (Sandbox Code Playgroud)

我无法在这里找到根本原因

我尝试通过多种方式修改 Glue 作业。我确保分配给作业的 IAM 角色有权删除相关存储桶上的文件夹。现在我正在使用 AWS 提供的默认临时/脚本文件夹。我试过在我的 s3 存储桶上使用文件夹,但看到类似的错误

s3://aws-glue-temporary-256967298135-us-east-2/admin
s3://aws-glue-scripts-256967298135-us-east-2/admin/rt-5/13-ETL-Tosat
Run Code Online (Sandbox Code Playgroud)

在下面分享完整的堆栈跟踪

19/05/10 17:57:59 INFO client.RMProxy: Connecting to ResourceManager at ip-172-32-29-36.us-east-2.compute.internal/172.32.29.36:8032
Container: container_1557510304861_0001_01_000002 on ip-172-32-1-101.us-east-2.compute.internal_8041
LogType:stdout
Log Upload Time:Fri May 10 17:57:53 +0000 2019
LogLength:0
Log Contents:
End of LogType:stdout …
Run Code Online (Sandbox Code Playgroud)

csv etl amazon-web-services parquet aws-glue

2
推荐指数
1
解决办法
3806
查看次数