使用带有模式的PHPAPI在BigQuery中创建表
我正在尝试使用PHPAPI在bigquery中创建一个表 我可以创建一个没有模式的表,但是当我提供一个模式时,会出现错误。看起来我使用了错误的语法,但是我尝试了我能想到的任何格式,却找不到一个我试图实现的示例 我使用字符串文字作为fields参数进行测试。我的代码如下所示:使用带有模式的PHPAPI在BigQuery中创建表,php,google-bigquery,Php,Google Bigquery,我正在尝试使用PHPAPI在bigquery中创建一个表 我可以创建一个没有模式的表,但是当我提供一个模式时,会出现错误。看起来我使用了错误的语法,但是我尝试了我能想到的任何格式,却找不到一个我试图实现的示例 我使用字符串文字作为fields参数进行测试。我的代码如下所示: $bigQuery = new BigQueryClient([ 'keyFilePath' => [keyfilepath], 'projectId' => [proje
$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 = '[{"name": "myfield","type": "STRING","mode": "REQUIRED"}, {"name": "anotherfield", "type": "STRING", "mode": "REQUIRED"}]';
$fields = [
['name'=> 'myfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED'],
['name'=> 'anotherfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED']
];
$options = [
'fields' => $fields
];
$dataSet->createTable('mytable', $options);
$fields = [
[
'name' => 'field1',
'type' => 'string',
'mode' => 'required'
],
[
'name' => 'field2',
'type' => 'integer'
],
];
这就产生了错误:
无效的字段选择{\'name\:\'myfield\'
或者,当我格式化“$fieldString”时,如下所示:
$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 = '[{"name": "myfield","type": "STRING","mode": "REQUIRED"}, {"name": "anotherfield", "type": "STRING", "mode": "REQUIRED"}]';
$fields = [
['name'=> 'myfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED'],
['name'=> 'anotherfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED']
];
$options = [
'fields' => $fields
];
$dataSet->createTable('mytable', $options);
$fields = [
[
'name' => 'field1',
'type' => 'string',
'mode' => 'required'
],
[
'name' => 'field2',
'type' => 'integer'
],
];
我得到一个错误:
无效的字段掩码“[{name\”:“myfield\”,“type\”:“STRING\”,“mode\”:“REQUIRED\”,{\“name\”:“anotherfield\”,“type\”:“STRING\”,“mode\”:“REQUIRED\”)。映射键应表示为[\“some\ u 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字段未重复,无法启动列表
然后我将代码编辑成如下所示:
$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 = '[{"name": "myfield","type": "STRING","mode": "REQUIRED"}, {"name": "anotherfield", "type": "STRING", "mode": "REQUIRED"}]';
$fields = [
['name'=> 'myfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED'],
['name'=> 'anotherfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED']
];
$options = [
'fields' => $fields
];
$dataSet->createTable('mytable', $options);
$fields = [
[
'name' => 'field1',
'type' => 'string',
'mode' => 'required'
],
[
'name' => 'field2',
'type' => 'integer'
],
];
其中:
警告:rawurlencode()要求参数1为字符串,数组给定
我以前在问题中没有提到这一点,因为我认为它不相关。事后看来可能是这样,但我的问题仍然存在。没有
$fieldString
这类东西,即$fields
数组
像这样:
$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 = '[{"name": "myfield","type": "STRING","mode": "REQUIRED"}, {"name": "anotherfield", "type": "STRING", "mode": "REQUIRED"}]';
$fields = [
['name'=> 'myfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED'],
['name'=> 'anotherfield', 'type' => 'INTEGER', 'mode' => 'REQUIRED']
];
$options = [
'fields' => $fields
];
$dataSet->createTable('mytable', $options);
$fields = [
[
'name' => 'field1',
'type' => 'string',
'mode' => 'required'
],
[
'name' => 'field2',
'type' => 'integer'
],
];
然后
参见示例。谢谢你的回答。这实际上是我尝试的第一件事,但我收到的错误似乎很明显,我没有提及。我已经用添加的示例更新了我的问题,你介意看一下吗?再次检查模式->字段->你的数组符号。你没有设置“模式”键的行。就是这样。Tha这个问题很好地说明了为什么异常应该有有用的消息。它开始于我在“table”中阅读“Unknown name\”schema\“并认为“这个键显然有错误的名称”。