合并bulkloader中的多个列

时间:2012-06-29 11:37:35

标签: google-app-engine bulkloader

我正在使用应用引擎的bulkloader将CSV文件导入我的数据存储区。我有很多列要合并到一个列中,例如它们都是URL,但并非所有列都提供,并且有一个替代订单,例如:

url_main
url_temp
url_test

我想说:“好的,如果url_main存在,请使用它,否则请使用url_test,然后使用url_temp

因此,是否可以创建引用列的自定义导入转换并根据条件将它们合并为一个?

1 个答案:

答案 0 :(得分:2)

好的,所以在阅读https://developers.google.com/appengine/docs/python/tools/uploadingdata#Configuring_the_Bulk_Loader后,我了解了import_transform,并且可以使用自定义函数。

考虑到这一点,这指出了正确的方法:

  

...使用关键字参数bulkload_state的双参数函数,   返回时包含有关实体的有用信息:   bulkload_state.current_entity,它是当前的实体   处理; bulkload_state.current_dictionary,当前导出   字典......

所以,我创建了一个处理两个变量的函数,一个是当前实体的value,第二个是允许我获取当前行的bulkload_state,如下所示:

def check_url(value, bulkload_state):
    row = bulkload_state.current_dictionary
    fields = [ 'Final URL', 'URL', 'Temporary URL' ]

    for field in fields:
        if field in row:
            return row[ field ]


    return None

所有这一切都是抓取当前行(bulkload_state.current_dictionary),然后检查存在哪些URL字段,否则它只返回None

在我的bulkloader.yaml中,我只需设置:

即可调用此功能
- property: business_url
  external_name: URL
  import_transform: bulkloader_helper.check_url

注意:external_name并不重要,只要它存在,因为我实际上没有使用它,我正在使用多个列。

Simples!