Firebase BigQuery 迁移 bash 错误

Posted

技术标签:

【中文标题】Firebase BigQuery 迁移 bash 错误【英文标题】:Firebase BigQuery migration bash error 【发布时间】:2018-07-10 10:43:09 【问题描述】:

我正在使用 Google 的标准工作流程来运行从旧数据集到新数据集的迁移 (Migration steps)。我估算了缺失值,例如 Property ID、BigQuery ID 等。当我运行 bash 脚本时出现以下错误?

Migrating mindfulness.com_mindfulness_android.app_events_20180515
--allow_large_results --append_table --batch --debug_mode --destination_table=analytics_171690789.events_20180515 --noflatten_results --nouse_legacy_sql --parameter=firebase_app_id::1:437512149764:android:0dfd4ab1e9926c7c --parameter=date::20180515 --parameter=platform::ANDROID#platform --project_id=mindfulness --use_gce_service_account
FATAL Flags positioning error: Flag '--project_id=mindfulness' appears after final command line argument. Please reposition the flag.
Run 'bq help' to get help.

在 *** 和 Google 上我找不到解决方案。有人知道如何解决这个问题吗?

我的 migration.sh 脚本(对 ID 稍作修改以保持匿名)

# Analytics Property ID for the Project. Find this in Analytics Settings in Firebase
PROPERTY_ID=171230123
# Bigquery Export Project
BQ_PROJECT_ID="mindfulness" #(e.g., "firebase-public-project")
# Firebase App ID for the app.
FIREBASE_APP_ID="1:123412149764:android:0dfd4ab1e1234c7c" #(e.g., "1:300830567303:ios:
# Dataset to import from.
BQ_DATASET="com_mindfulness_ANDROID" #(e.g., "com_firebase_demo_IOS")
# Platform
PLATFORM="ANDROID"#"platform of the app. ANDROID or IOS"
# Date range for which you want to run migration, [START_DATE,END_DATE]
START_DATE=20180515
END_DATE=20180517
# Do not modify the script below, unless you know what you are doing :)
startdate=$(date -d"$START_DATE"  +%Y%m%d) || exit -1
enddate=$(date -d"$END_DATE"  +%Y%m%d) || exit -1
# Iterate through the dates.
DATE="$startdate"
while [ "$DATE" -le "$enddate" ]; do
# BQ table constructed from above params.
BQ_TABLE="$BQ_PROJECT_ID.$BQ_DATASET.app_events_$DATE"
echo "Migrating $BQ_TABLE"
cat migration_script.sql | sed -e "s/SCRIPT_GENERATED_TABLE_NAME
$BQ_TABLE/g" | bq query \
    --debug_mode \
    --allow_large_results \
    --noflatten_results \
    --use_legacy_sql=False \
    --destination_table analytics_$PROPERTY_ID.events_$DATE \
    --batch \
    --append_table \
    --parameter=firebase_app_id::$FIREBASE_APP_ID \
    --parameter=date::$DATE \
    --parameter=platform::$PLATFORM \
    --project_id=$BQ_PROJECT_ID
temp=$(date -I -d "$DATE + 1 day")
DATE=$(date -d "$temp" +%Y%m%d)
done
exit
# END OF SCRIPT

【问题讨论】:

错误信息告诉你问题,对吧?您需要提前移动 --project_id 参数(在 query 命令之前)。 就像 Elliot 说的,有错误就在你面前 :) "FATAL Flags 定位错误:Flag '--project_id=mindfulness' 出现在最后的命令行参数之后。请重新定位标志。” 好吧,脚本中的注释说“不要修改下面的脚本,除非你知道自己在做什么:)”。我不太确定我在做什么,所以需要专家帮助;)。正如您所解释的那样,我试图通过对flags 的一些研究来修复错误。我尝试了 2 个解决方案: 1. 我将 "--project_id=$BQ_PROJECT_ID" 移动到正好在 "bq""query"之间的行>。这给出了一个错误。 2. 我在 "query" 之后直接移动了同一行,这给出了相同的错误(在下一个评论字段中) 【参考方案1】:

如果您查看脚本的输出,它会包含这段文本,就在出现故障的标志之前:

--parameter=platform::ANDROID#platform --project_id=mindfulness

我很确定您希望您的平台是ANDROID,而不是ANDROID#platform

我怀疑你可以通过在字符串末尾和内联注释之间放置一个空格来解决这个问题。所以你有这样的东西:

PLATFORM="ANDROID" #"platform of the app. ANDROID or IOS"

虽然为了安全起见,您可能希望在每行末尾完全删除 cmets。

【讨论】:

以上是关于Firebase BigQuery 迁移 bash 错误的主要内容,如果未能解决你的问题,请参考以下文章

需要 Crashlytics firebase BigQuery(小)示例数据集

BigQuery 和 Firebase - 如何确定每周增长

firebase 和 BigQuery 的保留结果不匹配

如何将所有事件数据从 Firebase 导出到 BigQuery?

突然 Firebase 事件未导出到 Bigquery

从 Firebase 到 BigQuery 的实时或每小时数据同步