使用带有架构的 PHP API 在大查询中创建表

我正在尝试使用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 是字符串,数组给定


我之前在我的问题中没有提到这一点,因为我认为这无关紧要。事后看来,这可能是,但我的问题仍然存在。


至尊宝的传说
浏览 118回答 1
1回答

眼眸繁星

没有数组这样的东西$fieldString$fields喜欢这个: $fields = [    [        'name' => 'field1',        'type' => 'string',        'mode' => 'required'    ],    [        'name' => 'field2',        'type' => 'integer'    ],];然后$schema = ['fields' => $fields];$table = $dataset->createTable($tableId, ['schema' => $schema]);请参阅此处的示例。
打开App,查看更多内容
随时随地看视频慕课网APP