わかりました、ここで何かを得たと思います。それは奇妙なものです...実際には、まったく同じスキーマ(フィールドモード)を持っていると機能しません。
ソース テーブルのスキーマは次のとおりです。
"schema": {
"fields": [
{
"name": "ID_CLIENT",
"type": "INTEGER",
"mode": "NULLABLE"
},
{
"name": "IDENTITE",
"type": "STRING",
"mode": "NULLABLE"
}
]
}
ブラウザー インターフェース (bigquery.cloud.google.com) からコピー機能を使用すると、期待されるものとまったく同じスキーマが得られます。
"schema": {
"fields": [
{
"name": "ID_CLIENT",
"type": "INTEGER",
"mode": "NULLABLE"
},
{
"name": "IDENTITE",
"type": "STRING",
"mode": "NULLABLE"
}
]
}
しかし、次のフェッチからコピーされたテーブルに追加できません。
SELECT ID_CLIENT + 1 AS ID_CLIENT, RIGHT(IDENTITE,12) AS IDENTITE FROM datasetid.client
少なくともブラウザー インターフェイス ビューからは同じスキーマを返しますが、内部的には次のスキーマを返します。
"schema": {
"fields": [
{
"name": "ID_CLIENT",
"type": "INTEGER",
"mode": "REQUIRED"
},
{
"name": "IDENTITE",
"type": "STRING",
"mode": "NULLABLE"
}
]
}
正確には同じスキーマではありません (チェックモード)。
そして奇妙なことに、この選択:
SELECT ID_CLIENT, IDENTITE FROM datasetid.client
このスキーマを返します:
"schema": {
"fields": [
{
"name": "ID_CLIENT",
"type": "INTEGER",
"mode": "REQUIRED"
},
{
"name": "IDENTITE",
"type": "STRING",
"mode": "REQUIRED"
}
]
}
結論:
Don't rely on tables schema information from the browser interface, always use Tables.get API.
Copy doesn't really work as expected...