我正在尝试使用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 是字符串,数组给定我之前在我的问题中没有提到这一点,因为我认为这无关紧要。事后看来,这可能是,但我的问题仍然存在。
1 回答
眼眸繁星
TA贡献1873条经验 获得超9个赞
没有数组这样的东西$fieldString$fields
喜欢这个:
$fields = [
[
'name' => 'field1',
'type' => 'string',
'mode' => 'required'
],
[
'name' => 'field2',
'type' => 'integer'
],
];
然后
$schema = ['fields' => $fields];
$table = $dataset->createTable($tableId, ['schema' => $schema]);
请参阅此处的示例。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消