Airflow 2.7.2 DAG 中出现意外的字符串串联问题

问题描述 投票:0回答:1

我在使用 Python 3.11.5 的 Airflow 2.7.2 中遇到字符串连接的意外问题。 此问题仅出现在Airflow中;相同的字符串连接在本地单元测试中可以正常工作。

这是 DAG 中演示该问题的代码片段:

values = ['1234', '5678', 'ABC_123', 'xyz-calc', '2024-01-01',
 'NULL', '9876', 'NULL', 'example', 42, '2024-07-28T01:23:45.678',
'2024-07-28T02:34:56.789', '2024-07-28T03:45:67.890', 'user_test',
 'complete', '2024-07-28T04:56:78.901',
'2024-07-28T05:67:89.012', 'NULL',
'spark-calc-1234-driver', 'NULL', 'NULL', 'XYZ']

values_str_list = []
for value in values:
    if isinstance(value, int):
        values_str_list.append(str(value))
    elif value == 'NULL':
        values_str_list.append('NULL')
    else:
        values_str_list.append(f"'{value}'")

values_str_3 = ',\n    '.join(values_str_list)  # This concatenation does NOT work correctly
print("Concatenated string values_str_3:")
print(values_str_3)

日志显示:

[2024-07-29, 22:12:39 UTC] {logging_mixin.py:151} INFO - Concatenated string values_str_3:
[2024-07-29, 22:12:39 UTC] {logging_mixin.py:151} INFO - 1234,
    5678,
    'ABC_123',
    'xyz-calc',
    '2024-01-01',
    NULL,
    '9876',
    NULL,
    'example',
    42,
    '2024-07-28T01:23:45.678',
    '2024-07-28T02:34:56.789',
    '2024-07-28T03:45:67.890',
    'user_test',
    'complete',
    '2024-07-28T04:56:78.901',
    '2024-07-28T05:67:89.012',
    NULL,
    'spark-calc-1234-driver',
    NULL,
    'XYZ'
    

问题是values_str_3字符串缺少一个元素。

比较这个

'spark-calc-1234-driver', NULL, NULL, 'XYZ'

还有这个

'spark-calc-1234-driver',
NULL,
'XYZ'

尚不清楚为什么values_str_3会产生这个结果。

有趣的是,当我拆分连接的字符串时,结果是正确的:

print("Original string values_str_3:", values_str_3.split(',\n    '))

日志显示:

[2024-07-29, 22:12:39 UTC] {logging_mixin.py:151} INFO - Original string values_str_3: ['1234', '5678',
 "'ABC_123'", "'xyz-calc'", "'2024-01-01'",
'NULL', "'9876'", 'NULL', "'example'", '42', "'2024-07-28T01:23:45.678'",
"'2024-07-28T02:34:56.789'", "'2024-07-28T03:45:67.890'", "'user_test'",
"'complete'", "'2024-07-28T04:56:78.901'", "'2024-07-28T05:67:89.012'", 'NULL',
"'spark-calc-1234-driver'", 'NULL', 'NULL', "'XYZ'"]

一切看起来都很正常。

感谢您的评论。它确实看起来像日志中的某种字符串重复数据删除。 这是最小的可重现示例。

values_str_3 = ',\n '.join(['values_str_3'] * 10) print(f"values_str_3:\n {values_str_3}") [2024-08-04, 08:06:08 UTC] {logging_mixin.py:151} INFO - values_str_3: values_str_3, values_str_3
但我在 Airflow 中找不到控制此功能的设置。

python python-3.x airflow airflow-2.x
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.