我正在尝试使用php api在大查询中创建一个表。
我可以创建一个没有架构的表,但是当我提供架构时,我会收到错误。看起来我使用了错误的语法,但是我尝试了我能想到的任何格式,但找不到我想要实现的目标的任何示例。
我使用字符串文本作为用于测试的字段参数。我的代码看起来像这样:
$bigQuery = new BigQueryClient([
'keyFilePath' => [keyfilepath],
'projectId' => [projectid],
'location' => [location]
]);
/** @var Dataset $dataSet */
$dataSet = $bigQuery->dataset('my-data-set');
$fieldString = '{"name": "myfield","type": "STRING","mode": "REQUIRED"}' . "\n" . '{"name": "anotherfield", "type": "STRING", "mode": "REQUIRED"}';
$options = [
'fields' => $fieldString
];
$dataSet->createTable('mytable', $options);
这给出了错误:
“字段选择无效 {\”名称“:”我的字段“”
或者,当我像这样格式化“$fieldString”时:
$fieldString = '[{"name": "myfield","type": "STRING","mode": "REQUIRED"}, {"name": "anotherfield", "type": "STRING", "mode": "REQUIRED"}]';
我收到错误:
无效的字段掩码“[{\”name\“:”myfield“,”类型“:”字符串“,”模式“:”必需“},{”名称“:”另一个字段“,”类型“:”字符串“,”模式“:”必需“}}”。映射键应表示为 [\“some_key\”]。
我还尝试先创建表,然后像这样更新它:
$table = $dataSet->createTable('mytable');
$table->update($options);
但我得到同样的错误。即使我使用与此处完全相同的 json 表示形式,问题仍然存在。
我在这里做错了什么?
更新:
实际上,在我切换到字段的字符串文本之前,我首先尝试了以下方法:
$fields = [
['name'=> 'myfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED'],
['name'=> 'anotherfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED']
];
$options = [
'schema' => $fields
];
$dataSet->createTable('mytable', $options);
这将产生错误:
“收到的 JSON 有效负载无效。“表”中的未知名称“架构”:Proto 字段不重复,无法启动列表。
然后我编辑了代码,如下所示:
$fields = [
['name'=> 'myfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED'],
['name'=> 'anotherfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED']
];
$options = [
'fields' => $fields
];
$dataSet->createTable('mytable', $options);
这给出了:
警告:原始代码()期望参数 1 是字符串,数组给定
我之前在我的问题中没有提到这一点,因为我认为这无关紧要。事后看来,这可能是,但我的问题仍然存在。
眼眸繁星