【问题标题】:Is it possible to update a Matillion Job DateTime variable from a Jython script?是否可以从 Jython 脚本更新 Matillion Job DateTime 变量?
【发布时间】:2020-01-28 13:41:13
【问题描述】:

我正在尝试将 DateTime 值从 Python (jython) 组件传递到 Python (python 3) 组件,但它似乎不起作用

有一个 Matillion 作业变量 myvar,类型为 DateTime,默认值为 2028-01-28 12:00:00

Jython 代码如下:

from dateutil.parser import parse
from datetime import timedelta  

print('class', myvar.getClass())
myvar = parse(str(myvar.toInstant())).replace(tzinfo=None)
print('myvar', repr(myvar))
myvar2 = myvar + timedelta(days=1)
print('myvar2', repr(myvar2))
context.updateVariable('myvar', myvar2)
print('myvar',  repr(myvar))

我已经看到 myvar 的类型错误 (str) Jython 执行结束

('class', <type 'com.matillion.bi.emerald.server.scripting.MatillionDate'>)
('myvar', 'datetime.datetime(2028, 1, 28, 12, 0)')
('myvar2', 'datetime.datetime(2028, 1, 29, 12, 0)')
('myvar', u'2028-01-29 12:00:00.0')

我假设我无法更新传递datetime 实例的变量。我想我必须将日期时间转换回 com.matillion.bi.emerald.server.scripting.MatillionDate,因为这似乎是 Jython 中 myvar 的类型。

问题是如何将我的日期时间转换为MatillionDate

【问题讨论】:

  • 您需要使用 Jython 吗? (您需要访问数据库吗?)如果不需要,请尝试使用 Python 3 解释器。 DateTime 更新在 Matillion for Snowflake 1.42.7 中对我有用。我也可以让它在 Jython 中工作,但我发现 Java/Python/Jython 类型令人困惑并且在 Matillion 中的文档记录很差,所以我尽可能避免使用 Jython。

标签: matillion


【解决方案1】:

我认为您看到的是字符串值,因为您使用的是变量的 repr() 函数。

我以你的例子为例,并添加了几行来说明我的意思。

from datetime import datetime
print('myvar',  type(myvar))
context.updateVariable('myvar', datetime.now())
print('myvar', myvar)
print('myvar', type(myvar))

您可以看到“类型”实际上是一个 Java 时间戳,这是有道理的,因为 Jython 在 JVM 中执行。您可以使用 Python 日期时间来更新变量,就像结果类型也是 Java 时间戳一样容易。

不过,要回答您的问题,如果您将 Matillion 变量设置为 str(myvar2) 的值,您应该能够在之后访问 Python3 组件中的相同/更新值(作为 datetime.datetime 对象),而无需创建另一个 MatillionDate 值的必要性。当从 Python3 中使用该值时,这只需要另一个类型转换。

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 2020-11-08
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    相关资源
    最近更新 更多