我正在使用 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 作业以便在插入后返回代理键?
此外,如果对客户数据进行重复数据删除(如上所述),您将如何处理密钥?
我正在尝试创建一个可以通过 HTTP 下载多个文件的作业。这些文件的列表在 MySQL 表中。我使用以下步骤创建了一个主要作业:启动、设置变量、文件列表(我创建的转换)、下载(我创建的作业)和成功。
转换 FILELIST 包含以下步骤:表输入和将行复制到结果(此转换与数据库通信并将 URL 列表提供给主任务)。任务下载包含以下步骤:开始、http、成功(此任务应将文件下载到我的计算机)。
这一切都行不通,为什么?有人知道做同样事情的更好方法吗?
我最近从 Informix DB 卸载了一个客户表,但由于客户名称列包含非转义的竖线(管道符号)字符,这是源数据库中的默认 DBDELIMITER,因此有几行被拒绝。我发现他们的客户表单中的字段有一个输入掩码,允许输入任何字母数字字符,其中可以包括任何字母、数字或符号。因此,我说服用户对该列运行全面更新,将管道符号更改为分号。我还发现其他行在不同的列中包含星号和逗号。我可以想象如果这张表以 csv 格式卸载会发生什么,或者星号会造成什么损害!
定义为分隔符的最佳字符是什么?如果表格已经被管道、逗号、星号、制表符、反斜杠等污染,清理它们的最佳方法是什么?
我有以下 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) 我的第一个任务是"文件系统任务".此任务创建一个文件夹.现在我无法弄清楚如何在文件系统任务刚创建的文件夹中创建空白文本文件.
我创建了2个变量 - mypath(c:\ sample\files)和myfilename(test.txt).
我已经创建了新的文件连接并从使用类型和文件中选择了创建文件选项:我已经给出了@[user::mypath] + @[user::myfilename].
但我得到的错误是:
包验证错误.
有人可以帮我如何创建一个新的文本文件?
我正在使用 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”属性设置不正确,参数设置不正确,或者连接建立不正确。
请帮我修复它。
我试图分解一个名为 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) 我现在正在设置 Airflow 并喜欢它,除了我的狗永远落后的事实。请参阅下图 - 这是在 2/19 UTC 时间 15:50 拍摄的,您可以看到,对于每个 dag,它们应该在上次运行和当前时间之间再运行一次(有一对夫妇,这不是真的 - 这些人目前已关闭)。有没有我错过的一些配置?
我已经定义了一个基本脚本来创建一个 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) 我正在 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)