如何创建保留嵌套RECORD字段

时间:2017-05-18 19:17:27

标签: sql google-bigquery google-cloud-platform

我有一个包含此架构的BigQuery表:

|- actorEmail: string (required)                         
|- actorCallerType: string (required)                                                    
+- baseOUs: record (repeated)                                                            
|  |- baseOU: string                                                                     
|- time: timestamp (required)                                                            
|- uniquequalifier: integer (required)                                                   
|- ipAddress: string (required)                                                          
|- EventType: string (required)                                                          
|- EventName: string (required)                                                          
+- parameter: record (repeated)                                                          
|  |- name: string                                                                       
|  |- value: string   

我想用这个查询创建一个视图:

SELECT actorEmail,actorCallerType,time,uniquequalifier,ipAddress,EventType,EventName,parameter
FROM <table>
WHERE baseOUs CONTAINS "/US"

哪个不起作用,因为您无法查询多个记录(尽管有一种解决方法)。但是,通过解决方法,它会使我不想发生的参数字段变平。

一般的想法是视图应该包含除重复字段以外的所有字段&#39; baseOUs&#39;,只显示记录&#34; / US&#34;在baseOUs中,不会展平参数字段。通过这样的视图,我可以将ACL应用于新视图,并仅为美国人提供数据访问权限,对于此表中包含数据的每个国家/地区都是如此。

根据this article,可以通过API使用flattenResults = false属性。但是,我想在UI中将其作为视图,而不是通过API。

还遇到了this article,它描述了如何在重复的字段中进行查询,但没有显示如何以非展平的方式呈现它们作为视图。是我试图做的甚至可能吗?

2 个答案:

答案 0 :(得分:2)

确保在创建视图时启用power set,并且在查询时也需要使用标准SQL。您可以将视图定义为:

baseOUs

这将保留表格的原始结构,同时仅包含/US中某个条目包含 Warning: Error in .local: Failed to connect to database: Error: Can't connect to MySQL server on 'server.url.' (57) Stack trace (innermost first): 47: .local 46: dbConnect 45: dbConnect Error in .local(drv, ...) : Failed to connect to database: Error: Can't connect to MySQL server on... 的行。您可以在standard SQL中了解旧版和标准SQL之间的更多差异。

答案 1 :(得分:1)

以下是BigQuery Standard SQL

<script type="text/javascript">var caseMgtData =
{
"totalNumOfCase": 2,
"cases": [{
    "id": "50017000003fWF4AAM",
    "caseNumber": "00007764",
    "status": "New",
    "priority": "Low",
    "subject": "Issue summary goes here",
    "description": "Full Description Goes here",
    "caseOwner": "00Go00000018IpCEAU",
    "contact": {
        "recordId": "00317000005XJUCAA4",
        "name": "blah Herring",
        "firstName": "blah",
        "lastName": "blah",
        "email": "blah@blah.com.x",
        "phone": "5209012560",
        "mobile": "5204655312"
    },
    "timeOpened": "2016-02-22T05:12:16.000+0000",
    "caseOrigin": "Web"
}, {
    "id": "50017000001NVoyAAG",
    "caseNumber": "00002009",
    "status": "Closed",
    "priority": "Low",
    "subject": "blah last test",
    "description": "blah last test",
    "caseOwner": "00517000000YfBJAA0",
    "contact": {
        "recordId": "00317000005XJUCAA4",
        "name": "Blah blah",
        "firstName": "blah",
        "lastName": "Herring",
        "email": "blah@blah.com.x",
        "phone": "5209012560",
        "mobile": "5204655312"
    },
    "timeOpened": "2015-03-10T17:34:36.000+0000",
    "timeClosed": "2015-06-03T05:37:16.000+0000",
    "caseOrigin": "Web"
}]
}
</script>