Airflow 当导入一个深度为1的变量为列表的变量文件时,如何解决InterfaceError?
我正在将一个变量文件(例如variables.json)导入到airflow中,其中一个depth-1变量是如下列表: { “var1”:[“value1”、“value2”] } 我尝试了3种方法: 1) 。命令行中:气流变量-i variables.json 2) 。在用户界面中,管理->变量->选择文件->导入变量 3) 。在airflow UI中,分别是admin->Variables->Create->input key(即Var1)和value(即[“value1”、“value2”) 方法1和2失败,但3成功 方法1返回“27个变量中有15个成功更新”之类的信息,这意味着某些变量没有成功更新 方法2显示错误: InterfaceError:(sqlite3.InterfaceError)绑定参数1时出错-可能是不支持的类型。[SQL:u'INSERT-INTO-variable(“key”,val,是加密的)值(?,,?)'][parameters:(u'var1',[u'value1',u'value2'],0)](此错误的背景信息位于:) 我搜索并找到此线程:。 sqlite似乎不支持列表类型 我还测试了一个嵌套变量(例如,这里的var2_1)为如下列表的情况 { “var2”:{“var2_1”:[“A”,“B”]} 。。。 } 以上三种方法均有效 因此,我的问题是: (1) 为什么方法1和2失败了,但对于作为列表的深度1变量,方法3成功了 (2) 为什么嵌套(depth-2,3,…)变量可以是一个没有任何问题的列表?在variable.json中,[“value1”、“value2”]是一个数组,其中需要值/字符串或json。 如果您将该数组强制转换为JSON中的字符串,它将起作用。在variable.JSON中,[“value1”、“value2”]是一个数组,其中需要值/字符串或JSON。Airflow 当导入一个深度为1的变量为列表的变量文件时,如何解决InterfaceError?,airflow,Airflow,我正在将一个变量文件(例如variables.json)导入到airflow中,其中一个depth-1变量是如下列表: { “var1”:[“value1”、“value2”] } 我尝试了3种方法: 1) 。命令行中:气流变量-i variables.json 2) 。在用户界面中,管理->变量->选择文件->导入变量 3) 。在airflow UI中,分别是admin->Variables->Create->input key(即Var1)和value(即[“value1”、“value2
如果您将该数组强制转换为JSON中的字符串,它将起作用。如果您运行的是Airflow 1.10.3,CLI中使用的
import\u helper
仅将dict
值序列化为JSON
def导入辅助程序(文件路径):
#...
对于d.项()中的k,v:
如果存在(v,dict):
set(k,v,serialize_json=True)
其他:
变量集(k,v)
n+=1
除例外情况外:
通过
最后:
打印({}个{}变量已成功更新。“.format(n,len(d)))
WebUI导入器也对dict值执行相同的操作
models.Variable.set(k,v,serialize_json=isinstance(v,dict))
但是,当前版本(1.10.4rc1)显示,在CLI的未来版本中,非字符串值将序列化为字符串import\u helper
Variable.set(k,v,serialize_json=not isinstance(v,six.string_类型))
…和WebUI导入程序
models.Variable.set(k,v,serialize_json=not isinstance(v,six.string_类型))
目前,当您使用CLI或WebUI导入器进行导入过程中非字符串值的序列化时,它将为您提供服务
…当您检索此类变量的值时,请传递反序列化它们的选项,例如
Variable.get('some-key',反序列化\u json=True)
如果您运行的是Airflow 1.10.3,CLI中使用的import\u helper
仅将dict
值序列化为JSON
def导入辅助程序(文件路径):
#...
对于d.项()中的k,v:
如果存在(v,dict):
set(k,v,serialize_json=True)
其他:
变量集(k,v)
n+=1
除例外情况外:
通过
最后:
打印({}个{}变量已成功更新。“.format(n,len(d)))
WebUI导入器也对dict值执行相同的操作
models.Variable.set(k,v,serialize_json=isinstance(v,dict))
但是,当前版本(1.10.4rc1)显示,在CLI的未来版本中,非字符串值将序列化为字符串import\u helper
Variable.set(k,v,serialize_json=not isinstance(v,six.string_类型))
…和WebUI导入程序
models.Variable.set(k,v,serialize_json=not isinstance(v,six.string_类型))
目前,当您使用CLI或WebUI导入器进行导入过程中非字符串值的序列化时,它将为您提供服务
…当您检索此类变量的值时,请传递反序列化它们的选项,例如
Variable.get('some-key',反序列化\u json=True)
谢谢您的回复,深呼吸。如果列表被转换成字符串,当然不会导致InterfaceError问题。但是,如何使用python for循环来获取单个元素(这里是“value1”、“value2”)?我认为将字符串解析回列表不是一个好主意。谢谢你的回复,呼吸。如果列表被转换成字符串,当然不会导致InterfaceError问题。但是,如何使用python for循环来获取单个元素(这里是“value1”、“value2”)?我认为将字符串解析回列表不是一个好主意。非常好的解释。我公司现有的代码似乎太旧了:仍在使用airflow 1.8.2:(.还有一个问题我忘了问:为什么方法3(即在airflow UI中,管理->变量->创建->分别输入键和值)handle list变量在旧版本中没有问题?与其他方法不同,方法3负责将值序列化为字符串。非常好的解释。我公司现有的代码似乎太旧了:仍在使用airflow 1.8.2,:(。还有一个问题我忘了问:为什么方法3可以(即,在airflow UI中,管理->变量->创建->分别输入键和值)处理旧版本中没有问题的列表变量?方法3处理serializi