问题标签 [etl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 直接的 Java/Groovy 与 ETL 工具(Talend/etc)——你会使用什么库?
假设您有一个小项目,从表面上看,它与 Talend 等 ETL 工具非常匹配。
但进一步假设,您从未使用过 Talend,此外,您通常不信任“可视化编程”工具,而宁愿在适当的语言和支持的帮助下以老式方式编写所有内容(在一个好的 IDE 上编写文本!)图书馆。
有哪些语言模式和支持库可以帮助您远离 ETL 工具的诱惑/陷阱?
database-design - 空数据问题 - 数据层还是 DAL?
我现在正在设计新的应用程序,并对以下问题进行了深思熟虑。我从仓库中消耗了大量数据,实体有很多基于字典的值(货币、国家、税收等数据) - 维度。我不能保证不会有空值。所以我在想:
- 在每个具有特殊 keyID 的字典中创建一个空值 - 即。-1
- 做ETL(ssis)做正确的事情并在需要的地方插入-1
- 让 DAL 知道 -1 是特殊的(静态 const 不管什么)
- 不要在代码中检查字典条目是否为空,因为它们总是有一个值
但也许我应该想:
- 按原样导入数据
- 让 DAL 使用空记录模式进行思考
- 仍然不在乎代码,因为业务层将从 DAL 获得它需要的东西。
我认为这更像是一种方法,但也许我在这里遗漏了一些重要的东西……您怎么看?我清楚了吗?请不要将其与空记录问题混淆。我确实一直在使用 emptyCustomer 思考和其他默认值。
database - 在数据集市中填充事实表的想法
我正在寻找在数据集市中填充事实表的想法。可以说我有以下尺寸
- 医师
- 病人
- 日期
- 地理位置
- 患者人口学
- 测试
我使用了两个 ETL 工具来填充维度表——Pentaho 和 Oracle Warehouse Builder。日期、患者人口统计和地理位置不会从运营存储中提取数据。所有维度表都有自己的新代理键。
我现在想用患者就诊的详细信息填充事实表。当患者在特定日期就诊时,他会下令进行测试。这是事实表中的信息。为了简单起见,我也省略了其他措施。
我可以在源系统的事实表中创建一个包含所有必需列的单一连接。但是,我需要为患者、医生、测试等存储维度表中的键。实现这一目标的最佳方法是什么?
ETL 工具可以帮助解决这个问题吗?
谢谢你克里希纳
java - 分布式ETL问题
寻找适用于 200 多个分布式系统(Windows、AS400、Linux 等)的 ETL 系统的任何建议。
我们每个月从所有客户(无论系统类型如何)收集数据,将其带回,一起处理,然后将聚合解决方案发回给他们。我的任务是自动化这个系统 - 关于如何稳健地做到这一点的任何建议,我真的不想重新发明轮子。我不拥有我从中提取数据的任何系统,这使这项任务变得更加困难,但可以安装客户端。
我已经在 Java 中创建了一个原型客户端/服务器架构,并使用 FTP 进行传输,但我觉得它很脆弱。我应该注意到,不同系统的所有提取/转换代码已经存在于 Java 中(尽管是遗留的)。
我应该提到我们目前每月提取一次数据,但正在努力每周。
任何见解都值得赞赏。
sql - 从 Teradata 以制表符分隔的形式生成自动导出的最佳方法?
我希望能够通过运行基本上以文本形式导出表或视图(SELECT * FROM tbl)的命令或批处理来生成文件(日期、数字等的默认转换为文本很好),制表符-分隔,将 NULL 转换为空字段(即 NULL 列在制表符之间没有空格,具有适当的行终止(CRLF 或 Windows),最好也具有列标题。
这是我可以在 SQL Assistant 12.0 中获得的相同导出,但选择导出选项,使用制表符分隔符,将我的 NULL 值设置为 '' 并包括列标题。
我一直无法找到正确的选项组合——我得到的最接近的方法是使用 CAST 和 '09'XC 构建单个列,但在我尝试过的大多数设置中,行仍然具有前导 2 字节长度指示符。我宁愿不必为各种不同的表构建大字符串。
database - 从 Transactional Flat DB 填充事实和维度表的最佳实践
我想在 SSIS/SSAS 中填充星型模式/多维数据集。
我准备了所有维度表和事实表、主键等。
源是一个“平面”(项目级别)表,我现在的问题是如何将其拆分并将其从一个表中获取到相应的表中。
我做了一些谷歌搜索,但找不到令人满意的解决方案。可以想象这是 BI 开发中相当普遍的问题/情况?!
谢谢,亚历克斯
postgresql - PostgreSQL 到数据仓库:近实时 ETL / 数据提取的最佳方法
背景:
我有一个针对 OLTP 进行了高度优化的 PostgreSQL (v8.3) 数据库。
我需要在半实时的基础上从中提取数据(有人一定会问半实时是什么意思,答案尽可能频繁,但我会务实,作为基准可以说我们希望每 15 分钟)并将其输入数据仓库。
多少数据?在高峰期,我们谈论每分钟大约 80-100k 行到达 OLTP 端,非高峰期这将显着下降到 15-20k。最频繁更新的行每行约为 64 字节,但有各种表等,因此数据非常多样化,每行最多可达 4000 字节。OLTP 24x5.5 处于活动状态。
最佳解决方案?
据我所知,最实用的解决方案如下:
- 创建 TRIGGER 以将所有 DML 活动写入旋转的 CSV 日志文件
- 执行所需的任何转换
- 使用原生 DW 数据泵工具将转换后的 CSV 有效地泵入 DW
为什么采用这种方法?
- TRIGGERS 允许将选择性表作为目标而不是系统范围 + 输出是可配置的(即到 CSV),并且相对容易编写和部署。SLONY 使用类似的方法,开销是可以接受的
- CSV 转换简单快速
- 易于将 CSV 泵入 DW
考虑的替代方案....
- 使用本机日志记录 ( http://www.postgresql.org/docs/8.3/static/runtime-config-logging.html )。问题是它相对于我需要的东西看起来非常冗长,并且解析和转换有点棘手。但是它可能会更快,因为我认为与 TRIGGER 相比开销更少。当然它会使管理员更容易,因为它是系统范围的,但同样,我不需要一些表(一些用于持久存储我不想记录的 JMS 消息)
- 直接通过 Talend 等 ETL 工具查询数据并将其泵入 DW ......问题是 OLTP 模式需要调整以支持这一点,并且有许多负面影响
- 使用经过调整/破解的 SLONY - SLONY 在记录和迁移更改到从属设备方面做得很好,因此概念框架就在那里,但提议的解决方案似乎更容易和更清晰
- 使用 WAL
有没有人这样做过?想分享你的想法吗?
etl - ETL 操作 - 返回主键
我正在使用 Talend 填充数据仓库。我的工作是将客户数据写入维度表,将交易数据写入事实表。事实表上的代理键 (p_key) 是自动递增的。当我插入一个新客户时,我需要我的事实表来反映相关客户的 ID。
正如我提到的,我的 p_key 是 auto_incrementing,所以我不能只为 p_key 插入任意值。
关于如何在我的维度表中插入一行并仍然检索主键以在我的事实记录中引用的任何想法?
更多信息:
如果传入的数据没有标准化怎么办?例如,我有一个包含以下数据的 csv:
显然,我希望客户信息出现在维度表中,而交易数据出现在事实表中:
正如您所提到的,维度表的键将是自动递增的。事实表需要引用这个键。您如何设计 etl 作业以便在插入后返回代理键?
此外,如果对客户数据进行了重复数据删除(如上所述),您将如何处理密钥?
mysql - WAN 上 MySQL 到 SQL Server 的 ETL 机制
我正在寻找有关通过 VPN 将外部主机从 MySQL Community Server 5.1.32 批处理数据到内部 SQL Server 05 Enterprise 机器的机制的一些反馈。外部盒子在整个工作时间内积累数据(每天约 100Mb),然后需要通过 WAN 连接(质量尚未确定,但不会超快)在国际上传输到内部公司环境,然后才能进行一些 BI 工作执行。这应该只是每晚都在进行的变更集。
我对人们之前在类似场景中成功使用的 ETL 机制的想法很感兴趣。SSIS 似乎是一个潜在的候选人。任何人都可以评论这种情况的适用性吗?或者,将非常感谢有关如何以成本意识的方式做到这一点的其他想法。谢谢!
python - Python - CSV:具有不同长度行的大文件
简而言之,我有一个 20,000,000 行的 csv 文件,它具有不同的行长。这是由于过时的数据记录器和专有格式。我们得到以下格式的 csv 文件的最终结果。我的目标是将此文件插入到 postgres 数据库中。我该如何执行以下操作:
- 保留前 8 列和我的最后 2 列,以获得一致的 CSV 文件
- 在第一个或最后一个位置向 csv 文件 ether 添加一个新列。