Google Workspace에서 사용자 데이터를 동기화하는 대신 Cloud Storage 또는 BigQuery에서 사용자 데이터를 가져올 수 있습니다. 이 페이지에서는 사용자 검색 커넥터를 만들고 Cloud Storage 버킷 또는 BigQuery 테이블에서 사용자에 대한 맞춤 데이터를 가져오는 방법을 설명합니다.
시작하기 전에
- 사용자 데이터가 BigQuery 테이블 또는 Cloud Storage 버킷에 있어야 합니다.
- 데이터가 Google에서 지정한 스키마에 있어야 합니다. 스키마에 대한 자세한 내용은 Google에서 지정한 사용자 데이터 스키마를 참고하세요.
커스텀 소스에서 사용자 데이터 수집하기
Google Cloud 콘솔을 사용하여 사용자 데이터를 수집하려면 다음 단계를 수행합니다.
콘솔
Google Cloud 콘솔에서 Gemini Enterprise 페이지로 이동합니다.
데이터 스토어 페이지로 이동합니다.
데이터 스토어 만들기를 클릭합니다.
새 데이터 스토어를 만듭니다. 데이터 소스 선택 페이지의 Cloud 소스 섹션에서 커스텀 커넥터를 통한 사용자를 선택합니다.
데이터 소스를 선택합니다. 사용자 데이터를 가져옵니다.
나중에 가져오기: 아직 사용자 데이터를 Cloud SQL 또는 BigQuery로 가져오지 않았으면 나중에 가져오기를 선택합니다.
BigQuery: BigQuery 테이블에서 데이터를 가져옵니다.
Cloud Storage: Cloud Storage 테이블에서 데이터를 가져옵니다.
사용자 데이터를 가져옵니다. 계속을 클릭합니다.
데이터 스토어의 리전을 선택합니다.
데이터 스토어 이름을 입력합니다.
선택사항: 데이터에 액세스 제어가 필요한 경우 이 데이터 스토어에 액세스 제어 정보가 포함되어 있습니다를 선택합니다. 자세한 내용은 데이터 소스 액세스 제어를 참조하세요.
만들기를 클릭합니다.
데이터 커넥터를 구성합니다. 수집 상태를 확인하려면 데이터 스토어 페이지로 이동하여 데이터 스토어 이름을 클릭한 후 데이터 페이지에서 세부정보를 확인합니다. 활동 탭의 상태 열이 진행 중에서 가져오기 완료됨으로 변경되면 수집이 완료된 것입니다.
데이터 크기에 따라 수집에 몇 분 또는 몇 시간까지 걸릴 수 있습니다.
검색 결과 맞춤설정
검색 결과에 개인 정보를 포함하거나 제외하려면 다음 단계를 수행합니다.
데이터 스토어에서 항목 탭을 클릭하고 사용자를 클릭합니다.
사용자 페이지에서 스키마 탭을 클릭합니다.
수정을 클릭합니다.
국가와 같은 속성을 선택하거나 선택 해제하여 가져오기 가능, 검색 가능, 색인 생성 가능 여부를 지정합니다. 검색이 가능하게 하려면 속성이 가져오기 가능, 색인 생성 가능, 검색 가능으로 표시되어야 합니다.
저장을 클릭합니다.
사용자 검색 결과 미리보기
이미 데이터 스토어를 앱에 연결한 경우 앱을 클릭하고 앱 이름을 클릭합니다.
미리보기를 클릭합니다.
검색창을 사용하여 조직의 사용자를 검색합니다. 검색 결과에는 이름, 직책, 이메일, 프로필 사진과 같은 세부정보가 표시됩니다.
브라우저에서 Gemini Enterprise 웹 앱을 열려면 검색 웹 앱 보기를 참조하세요.
검색 결과를 미리 봅니다. 커스텀 속성을 검색 가능으로 설정한 경우 검색에서 속성을 사용할 수 있지만 속성 자체는 프로필에 반환되지 않습니다. 예를 들어
team-position
이 커스텀 속성이고 스키마에서 가져오기 가능, 색인 생성 가능, 검색 가능으로 표시된 경우 'tech lead'와 같은 특정 팀 직책을 가진 사용자를 검색할 수 있습니다. 해당 직책을 가진 사용자 목록이 표시되지만 출력에는 'tech lead' 단어가 포함되지 않습니다.
검색 웹 앱 보기
Gemini Enterprise 웹 앱을 보려면 다음 단계를 따르세요.
탐색 메뉴에서 통합을 클릭합니다.
웹 앱 사용 설정이 사용 설정되어 있는지 확인합니다.
웹 앱 링크 섹션에서 복사를 클릭하고 브라우저에서 링크를 엽니다.
사용자 데이터의 조직 정의 스키마 필드의 예
각 사용자의 데이터 세트는 다음 스키마에 따라 형식이 지정되어야 합니다. Cloud Storage에서 가져온 파일의 예에서 JSONL 파일의 각 줄은 사용자를 나타냅니다. 유효하지만 최소한의 파일은 다음과 같습니다.
{"id":"01","structData":{"personId":"01","name":{"familyName":"Doe","givenName":"Jane"},"email":{"type":"work","value":"jdoe@example.com"}}}
{"id":"02","structData":{"personId":"02","name":{"familyName":"Kumar","givenName":"Ashok"},"email":{"type":"home","value":"akumar@example.net"}}}
필드 이름 |
유형 |
반복 가능 |
색인 생성 가능 |
가져오기 가능 |
검색 가능 |
설명 |
---|---|---|---|---|---|---|
personId |
문자열 |
N |
예 |
Y |
Y |
사용자의 고유 ID입니다. 필수 필드입니다. |
name.familyName |
문자열 |
N |
예 |
Y |
Y |
사용자의 성입니다. |
name.givenName |
문자열 |
N |
예 |
Y |
Y |
사용자의 이름입니다. |
name.displayName |
문자열 |
N |
예 |
Y |
Y |
사용자의 표시 이름입니다. |
name.username |
문자열 |
N |
예 |
Y |
Y |
사용자의 사용자 이름입니다. |
emails.type |
문자열 |
Y |
아니요 |
N |
N |
이메일 계정 유형(예: '직장', '집', '기타', '커스텀')입니다. |
emails.value |
문자열 |
Y |
Y |
Y |
Y |
사용자의 이메일 주소(예: 'acruz@example.net')입니다. |
phoneNumbers.type |
문자열 |
Y |
Y |
Y |
Y |
전화번호 유형(예: '사무실', '휴대전화', '기타')입니다. |
phoneNumbers.value |
문자열 |
Y |
Y |
Y |
Y |
사용자의 전화번호(예: '+1 800-555-1212')입니다. |
suspended |
부울 |
N |
N |
N |
N |
사용자가 조직에서 정지되었는지 여부입니다. |
employeeId |
문자열 |
N |
예 |
Y |
Y |
사용자의 직원 ID입니다. |
employeeType |
문자열 |
N |
예 |
Y |
Y |
사용자의 직원 유형(예: '정규직', '인턴', '계약직')입니다. |
employmentStatus |
문자열 |
N |
N |
N |
N |
사용자의 고용 상태입니다. |
availabilityStatus |
문자열 |
N |
N |
N |
N |
사용자의 대화 가능 상태(예: '부재중', '재택근무', '회의 중')입니다. |
creationDate |
datetime |
N |
N |
N |
N |
소스 시스템에서 사용자를 만든 날짜입니다. |
modifiedDate |
datetime |
N |
N |
N |
N |
소스 시스템에서 사용자를 마지막으로 수정한 날짜입니다. |
deletionDate |
datetime |
N |
N |
N |
N |
소스 시스템에서 사용자를 삭제한 날짜입니다. |
hireDate |
datetime |
N |
예 |
Y |
N |
사용자가 채용된 날짜입니다. |
gender.addressMeAs |
문자열 |
N |
예 |
Y |
Y |
사용자가 선호하는 호칭 선택사항(예: '그/그의', '그녀/그녀의', '그들/그들의')입니다. |
gender.type |
문자열 |
N |
예 |
Y |
Y |
사용자의 성별(예: '남성', '여성', '기타')입니다. |
displayPhoto.url |
문자열 |
N |
예 |
Y |
Y |
사진의 URL입니다. |
displayPhoto.imageBinary |
문자열 |
N |
예 |
Y |
Y |
사진의 이미지 바이너리의 Base64로 인코딩된 문자열입니다. |
displayPhoto.format |
문자열 |
N |
예 |
Y |
Y |
이미지 바이너리의 형식(예: 'png')입니다. |
addresses.country |
문자열 |
Y |
Y |
Y |
Y |
연결된 주소의 국가(예: '미국')입니다. |
addresses.countryCode |
문자열 |
Y |
아니요 |
N |
N |
연결된 주소의 국가 코드(예: 'US')입니다. |
addresses.locality |
문자열 |
Y |
Y |
Y |
Y |
연결된 주소의 지역(예: 'Mountain View')입니다. |
addresses.poBox |
문자열 |
Y |
아니요 |
N |
N |
연결된 주소의 사서함(예: 'PO Box 123')입니다. |
addresses.postalCode |
문자열 |
Y |
아니요 |
N |
N |
연결된 주소의 우편번호(예: '94043')입니다. |
addresses.region |
문자열 |
Y |
아니요 |
N |
N |
연결된 주소의 지역(예: 'CA')입니다. |
addresses.streetAddress |
문자열 |
Y |
Y |
Y |
Y |
연결된 상세 주소(예: '1800 Amphibious Blvd.')입니다. |
addresses.type |
문자열 |
Y |
아니요 |
N |
N |
연결된 주소의 유형(예: '집', '직장', '기타')입니다. |
location.value |
문자열 |
N |
예 |
Y |
Y |
사용자의 사무실 위치(예: '런던')입니다. |
location.buildingId |
문자열 |
N |
예 |
Y |
Y |
사용자 사무실 위치의 건물 ID(예: 'London')입니다. |
location.deskCode |
문자열 |
N |
예 |
Y |
Y |
사용자 사무실 위치의 데스크 코드(예: '5C1C')입니다. |
location.floorName |
문자열 |
N |
예 |
Y |
Y |
사용자 사무실 위치의 층 이름(예: '5층')입니다. |
location.floorSection |
문자열 |
N |
예 |
Y |
Y |
위치의 층 섹션(예: '섹션 C')입니다. |
location.type |
문자열 |
N |
N |
N |
N |
위치 유형(예: '데스크' 또는 '건물')입니다. |
organizations.department |
문자열 |
Y |
Y |
Y |
Y |
조직의 부서(예: '엔지니어링')입니다. |
organizations.description |
문자열 |
Y |
아니요 |
N |
N |
조직에 대한 설명입니다. |
organizations.jobTitle |
문자열 |
Y |
Y |
Y |
Y |
사용자의 직책(예: '소프트웨어 엔지니어')입니다. |
organizations.location |
문자열 |
Y |
Y |
Y |
Y |
조직의 위치(예: '런던')입니다. |
organizations.name |
문자열 |
Y |
Y |
Y |
Y |
조직의 이름입니다. |
organizations.symbol |
문자열 |
Y |
아니요 |
N |
N |
조직의 티커 기호입니다. |
organizations.costCenter |
문자열 |
Y |
Y |
Y |
Y |
조직의 비용 센터(예: '75B')입니다. |
organizations.type |
문자열 |
Y |
아니요 |
N |
N |
조직의 유형(예: '직장' 또는 '기타')입니다. |
organizations.projects.name |
문자열 |
Y |
Y |
Y |
Y |
사용자에게 할당된 프로젝트의 이름(예: 'ML Ops')입니다. |
organizations.projects.description |
문자열 |
Y |
아니요 |
N |
N |
사용자에게 할당된 프로젝트에 대한 설명(예: '세계 최고의 ML 인프라 구축')입니다. |
organizations.projects.role |
문자열 |
Y |
아니요 |
N |
N |
프로젝트에서의 사용자 역할(예: '리드')입니다. |
managers.personId |
문자열 |
Y |
Y |
Y |
Y |
직속 관리자부터 최상위 관리자까지 사용자의 현재 관리 체인의 personId입니다. |
managers.email |
문자열 |
Y |
Y |
Y |
Y |
직속 관리자부터 최고 관리자까지 사용자의 현재 관리 체인에 있는 각 관리자의 이메일 주소입니다. |
dottedLineReports.personId |
문자열 |
Y |
아니요 |
N |
N |
사용자의 점선 보고서( |
dottedLineReports.email |
문자열 |
Y |
아니요 |
N |
N |
사용자의 점선 보고서( |
topCoworkers.personId |
문자열 |
Y |
아니요 |
N |
N |
사용자의 동료( |
topCoworkers.affinityScore |
숫자 |
Y |
아니요 |
N |
N |
동료와 관련된 사용자의 친화도 점수(순위 지정에 사용됨)입니다. |
admins.personId |
문자열 |
Y |
아니요 |
N |
N |
사용자에게 할당된 관리자( |
admins.email |
문자열 |
Y |
아니요 |
N |
N |
사용자에게 할당된 관리자( |
websites.type |
문자열 |
Y |
아니요 |
N |
N |
사용자의 웹사이트 유형(예: '직장', '블로그', '기타')입니다. |
websites.value |
문자열 |
Y |
아니요 |
N |
N |
웹사이트 유형(예: 'https://example-pet-store.com')입니다. |
directManager.personId |
문자열 |
N |
예 |
Y |
Y |
사용자의 직속 관리자의 personId입니다. |
BigQuery의 페이로드 예시
INSERT INTO `playground-koyel.ibank_ccai_uat.people_connector_3` (id, structData)
WITH records_to_insert AS (
SELECT [
-- Record 1: jdoe
STRUCT('jdoe' as id, STRUCT(
"jdoe" AS personId,
STRUCT("Doe","Jane","Jane Doe","jdoe") AS name,
[STRUCT("work","jdoe@example.net")] AS emails,
[STRUCT("personal","9131568042")] AS phoneNumbers,
false AS suspended,
"13" AS employeeId,
CAST(NULL AS STRING) as employeeType,
CAST(NULL AS STRING) as employmentStatus,
"focus" AS availabilityStatus,
CAST(NULL AS DATETIME) AS creationDate,
CAST(NULL AS DATETIME) AS modifiedDate,
CAST(NULL AS DATETIME) AS deletionDate,
CAST(NULL AS DATETIME) AS hireDate,
STRUCT("Male","Male") AS gender,
STRUCT(CAST(NULL AS STRING) AS url, CAST(NULL AS STRING) AS imageBinary, "png" as format) AS displayPhoto,
[STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))] AS addresses,
STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),"7",CAST(NULL AS STRING),CAST(NULL AS STRING)) AS location,
[STRUCT("Engineering","Our mission is to help organizations be more productive by making contextually relevant information and collaborators accessible at the right time","Software Engineer","Bangalore","Intranet search",CAST(NULL AS STRING),"80997GX000",CAST(NULL AS STRING),[STRUCT("People Search",CAST(NULL AS STRING),"Individual Contributor")])] AS organizations,
[STRUCT("dwilson",CAST(NULL AS STRING)),STRUCT("smiller",CAST(NULL AS STRING)),STRUCT("jmartinez",CAST(NULL AS STRING))] AS managers,
CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>) AS dottedLineReports,
CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>) AS topCoworkers,
CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>) AS admins,
[STRUCT("personal","https://jdoe.myownpersonaldomain.com")] AS websites,
STRUCT("dwilson") AS directManager
) AS structData),
-- Record 2: psmith
STRUCT('psmith' as id, STRUCT(
"psmith",
STRUCT("Smith","Peter","Peter Smith","psmith"),
[STRUCT("work","psmith@example.net")],
[STRUCT("personal","abc")],
false, "1249989", CAST(NULL AS STRING), CAST(NULL AS STRING), "focus", CAST(NULL AS DATETIME), CAST(NULL AS DATETIME), CAST(NULL AS DATETIME), CAST(NULL AS DATETIME),
STRUCT("Male","Male"),
CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>),
[STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))],
STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),"7",CAST(NULL AS STRING),CAST(NULL AS STRING)),
[STRUCT("Engineering","Our mission is to help organizations be more productive by making contextually relevant information and collaborators accessible at the right time","Software Engineer","Bangalore","Intranet search",CAST(NULL AS STRING),"80997GX000",CAST(NULL AS STRING),[STRUCT("ACL",CAST(NULL AS STRING),"Individual Contributor")])],
[STRUCT("dwilson",CAST(NULL AS STRING)),STRUCT("smiller",CAST(NULL AS STRING)),STRUCT("jmartinez",CAST(NULL AS STRING))],
CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>), CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>), CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),
CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),
STRUCT("dwilson")
) AS structData),
-- Record 3: mgarcia
STRUCT('mgarcia' as id, STRUCT(
"mgarcia",
STRUCT("Garcia","Maria","Maria Garcia","mgarcia"),
[STRUCT("work","mgarcia@example.net")],
[STRUCT("personal","abc")],
false, "1204052", CAST(NULL AS STRING), CAST(NULL AS STRING), "focus", CAST(NULL AS DATETIME), CAST(NULL AS DATETIME), CAST(NULL AS DATETIME), CAST(NULL AS DATETIME),
STRUCT("Female","Female"),
CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>),
[STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))],
STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),"7",CAST(NULL AS STRING),CAST(NULL AS STRING)),
[STRUCT("Engineering","Our mission is to help organizations be more productive by making contextually relevant information and collaborators accessible at the right time","Software Engineer","Bangalore","Intranet search",CAST(NULL AS STRING),"80997GX000",CAST(NULL AS STRING),[STRUCT("People Search",CAST(NULL AS STRING),"Individual Contributor")]), STRUCT("gBadminton","To organize our team's badminton community and make the sport accessible to all.","Organizer","Bangalore","OneBlr",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS ARRAY<STRUCT<name STRING, description STRING, role STRING>>))],
[STRUCT("dwilson",CAST(NULL AS STRING)),STRUCT("smiller",CAST(NULL AS STRING)),STRUCT("jmartinez",CAST(NULL AS STRING))],
CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>), CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>), CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),
[STRUCT("personal","https://mgarcia.myownpersonaldomain.com")],
STRUCT("dwilson")
) AS structData),
-- Other records follow the same pattern...
STRUCT('dwilson' as id, STRUCT("dwilson", STRUCT("Wilson","David","David Wilson","dwilson"),[STRUCT("work","dwilson@example.net")],[STRUCT("personal","abc")],false,"14",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Male","Male"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),"7",CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Engineering","Our mission is to help organizations be more productive by making contextually relevant information and collaborators accessible at the right time","Engineering Manager","Bangalore","Intranet search",CAST(NULL AS STRING),"80997GX000",CAST(NULL AS STRING),[STRUCT("Connectors",CAST(NULL AS STRING),"Engineering Manager")])],[STRUCT("smiller",CAST(NULL AS STRING)),STRUCT("jmartinez",CAST(NULL AS STRING))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),STRUCT("smiller")) AS structData),
STRUCT('ejohnson' as id, STRUCT("ejohnson", STRUCT("Johnson","Emily","Emily Johnson","ejohnson"),[STRUCT("work","ejohnson@example.net")],[STRUCT("personal","abc")],false,"652365",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Male","Male"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),"7",CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Engineering","Our mission is to help organizations be more productive by making contextually relevant information and collaborators accessible at the right time","Senior Software Engineer","Bangalore","Intranet search",CAST(NULL AS STRING),"80997GX000",CAST(NULL AS STRING),[STRUCT("BAP Connector Integration",CAST(NULL AS STRING),"Team Lead")])],[STRUCT("smiller",CAST(NULL AS STRING)),STRUCT("jmartinez",CAST(NULL AS STRING))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),STRUCT("smiller")) AS structData),
STRUCT('mbrown' as id, STRUCT("mbrown", STRUCT("Brown","Michael","Michael Brown","mbrown"),[STRUCT("work","mbrown@example.net")],[STRUCT("personal","abc")],false,"1007126",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Female","Female"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),"7",CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Engineering","Our mission is to help organizations be more productive by making contextually relevant information and collaborators accessible at the right time","Software Engineer","Bangalore","Intranet search",CAST(NULL AS STRING),"80997GX000",CAST(NULL AS STRING),[STRUCT("BAP Connector Integration",CAST(NULL AS STRING),"Individual Contributor")])],[STRUCT("smiller",CAST(NULL AS STRING)),STRUCT("jmartinez",CAST(NULL AS STRING))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),STRUCT("smiller")) AS structData),
STRUCT('smiller' as id, STRUCT("smiller", STRUCT("Miller","Sarah","Sarah Miller","smiller"),[STRUCT("work","smiller@example.net")],[STRUCT("personal","abc")],false,"15",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Male","Male"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),"7",CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Engineering","Our mission is to help organizations be more productive by making contextually relevant information and collaborators accessible at the right time","Senior Engineering Manager","Bangalore","Intranet search",CAST(NULL AS STRING),"80997GX000",CAST(NULL AS STRING),[STRUCT("Intranet Search",CAST(NULL AS STRING),"Senior Engineering Manager")])],[STRUCT("jmartinez",CAST(NULL AS STRING))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),STRUCT("jmartinez")) AS structData),
STRUCT('clee' as id, STRUCT("clee", STRUCT("Lee","Chris","Chris Lee","clee"),[STRUCT("work","clee@example.net")],[STRUCT("personal","abc")],false,"717389",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Female","Female"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("US","US","Kirkland",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Kirkland","US-KIR-6THC",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Engineering","Empower every GCP customer to transform themselves through intelligence from their data.","Software Engineer","Kirkland","Vertex AI Search",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS ARRAY<STRUCT<name STRING, description STRING, role STRING>>))],[STRUCT("jmartinez",CAST(NULL AS STRING))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),STRUCT("jmartinez")) AS structData),
STRUCT('jmartinez' as id, STRUCT("jmartinez", STRUCT("Martinez","Jessica","Jessica Martinez","jmartinez"),[STRUCT("work","jmartinez@example.net")],[STRUCT("personal","abc")],false,"153035",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Male","Male"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("United States of America","US","Sunnyvale",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Sunnyvale","US-SVL-MP2",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Engineering","Empower every GCP customer to transform themselves through intelligence from their data.","Engineering Director","Sunnyvale","Vertex AI Search",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS ARRAY<STRUCT<name STRING, description STRING, role STRING>>))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),CAST(NULL AS STRUCT<personId STRING>)) AS structData),
STRUCT('dtaylor' as id, STRUCT("dtaylor", STRUCT("Taylor","Daniel","Daniel Taylor","dtaylor"),[STRUCT("work","dtaylor@example.net")],[STRUCT("personal","abc")],false,"950380",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Female","Female"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("United States of America","US","Sunnyvale",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Sunnyvale","US-SVL-MP5",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Engineering","Empower every GCP customer to transform themselves through intelligence from their data.","Product Manager","Sunnyvale","Vertex AI Search",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS ARRAY<STRUCT<name STRING, description STRING, role STRING>>))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),CAST(NULL AS STRUCT<personId STRING>)) AS structData),
STRUCT('oanderson' as id, STRUCT("oanderson", STRUCT("Anderson","Olivia","Olivia Anderson","oanderson"),[STRUCT("work","oanderson@example.net")],[STRUCT("personal","abc")],false,"103388",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Male","Male"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("United States of America","US","Remote",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Remote","US-REMOTE-MTV",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Engineering","Keep developers happy with their source code tools and services.","Git Maintainer",CAST(NULL AS STRING),"Developer Services",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS ARRAY<STRUCT<name STRING, description STRING, role STRING>>))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),CAST(NULL AS STRUCT<personId STRING>)) AS structData),
STRUCT('mthomas' as id, STRUCT("mthomas", STRUCT("Thomas","Matthew","Matthew Thomas","mthomas"),[STRUCT("work","mthomas@example.net")],[STRUCT("personal","abc")],false,"363045",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Female","Female"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("United States of America","US","Mountain View",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Remote","US-MTV-40",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Finance","Getting more ambitious things done","CIO",CAST(NULL AS STRING),"Alphabet",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS ARRAY<STRUCT<name STRING, description STRING, role STRING>>))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),CAST(NULL AS STRUCT<personId STRING>)) AS structData),
STRUCT('swhite' as id, STRUCT("swhite", STRUCT("White","Sophia","Sophia White","swhite"),[STRUCT("work","swhite@example.net")],[STRUCT("personal","abc")],false,"938578",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Male","Male"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Customer","Successful Strategic Customer in the Cloud!","Strategic Cloud Engineer",CAST(NULL AS STRING),"Cloud Professional Services Organization (PSO)",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS ARRAY<STRUCT<name STRING, description STRING, role STRING>>))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),CAST(NULL AS STRUCT<personId STRING>)) AS structData),
STRUCT('jharris' as id, STRUCT("jharris", STRUCT("Harris","James","James Harris","jharris"),[STRUCT("work","jharris@example.net")],[STRUCT("personal","abc")],false,"723457",CAST(NULL AS STRING),CAST(NULL AS STRING),"focus",CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),CAST(NULL AS DATETIME),STRUCT("Male","Male"),CAST(NULL AS STRUCT<url STRING, imageBinary STRING, format STRING>), [STRUCT("India","IN","Bangalore",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING))], STRUCT("Bangalore","IN-LOCATION-01",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING)),[STRUCT("Recruiting",CAST(NULL AS STRING),"Sr Recruiter",CAST(NULL AS STRING),"Hiring Committee",CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS STRING),CAST(NULL AS ARRAY<STRUCT<name STRING, description STRING, role STRING>>))],CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, affinityScore NUMERIC>>),CAST(NULL AS ARRAY<STRUCT<personId STRING, email STRING>>),CAST(NULL AS ARRAY<STRUCT<type STRING, value STRING>>),CAST(NULL AS STRUCT<personId STRING>)) AS structData)
] AS all_records
)
SELECT
record.id,
record.structData
FROM records_to_insert, UNNEST(all_records) as record;
Cloud Storage의 페이로드 예시
{"id":"person1","structData":{"working_from_home": "false", "personId":"person1","name":{"familyName":"Kumar","givenName":"person1","displayName":"person1 Kumar","username":"person1"},"emails":[{"type":"work","value":"person1@example.net"}],"phoneNumbers":[{"type":"personal","value":"1234"}],"suspended":false,"employeeId":"13","availabilityStatus":"focus","gender":{"addressMeAs":"Male","type":"Male"},"addresses":[{"country":"India","countryCode":"IN","locality":"Bangalore"}],"location":{"value":"Bangalore","buildingId":"IN-LOCATION-01","floorName":"7"},"organizations":[{"department":"Engineering","description":"Our mission is to help organizations be more productive by making contextually relevant information and collaborators accessible at the right time","jobTitle":"Software Engineer","location":"Bangalore","name":"Intranet search","projects":[{"name":"People Search","role":"Individual Contributor"}],"costCenter":"123"}],"directManager":{"personId":"manager1"},"managers":[{"personId":"manager1"},{"personId":"manager2"},{"personId":"manager3"}],"websites":[{"type":"personal","value":"https://person1.myownpersonaldomain.com"}],"displayPhoto":{"imageBinary":{"format":"image/png","data":"binary_content"}}}}