### Bigquery tables, 
# dataset:salesforce, table: crm\_account, description: 'customer infomration', columns: ['AccountID' (STRING, Description('customer ID')), 'AccountName' (STRING), 'Industry' (STRING), 'Region' (STRING), 'CreateTime' (DATETIME), 'UpdateTime' (DATETIME), 'Segmentation' (STRING, ENUM('SKA', 'KA', 'SMB'), Description('customer priority')]
# dataset:salesforce, table: TiDB\_cloud\_tenant, description: 'TiDB Cloud tenent information', columns: [ 'TenantID' (STRING), 'AccountID' (STRING), 'CreatedTime' (DATETIME), 'Status' (STRING), 'OrderType' (STRING, ENUM('', 'Unknown', 'On Demand', 'Commitment Plan', 'Paid PoC'))]
# dataset:salesforce, table: salesforce\_oppo, description: 'Business opportunity data', columns: [ 'OppoID' (STRING), 'OpportunityName' (STRING), 'OpportunityScore' (STRING), 'ACVAmount' (FLOAT64), 'ExchangeRate' (FLOAT64), 'CloseDate' (DATE), 'ForecastCategory' (STRING, ENUM('Omitted', 'Pipeline', 'Best Case', 'Closed', 'Commit')), 'LighthouseLogo' (STRING), 'Probability' (FLOAT64), 'ProductFamily' (STRING, ENUM('TiDB Cloud', 'PingCAP Services', 'TiDB Enterprise Subscription', 'PingCAP Training & Exam Services', 'PingCAP Professional Services', 'PingCAP Consulting Services')),'Region' (STRING), 'Stage' (STRING, ENUM('Closed Lost', 'Prospecting', 'Evaluation', 'Qualification', 'Bidding / Negotiating', 'Closed Won', 'Contract Review')), 'TechnicalScenario' (STRING, ENUM('Real-time HTAP', 'Scaleable OLTP', 'TiKV')), 'AccountId' (STRING), 'OpportunityRecordType' (STRING, ENUM('New', 'New Subscription', 'Renewal', 'Expansion')), 'LossReason' (STRING), 'CreatedDate' (DATE)]
# dataset:model\_fp\_and\_a, table: salesforce\_activated\_order, description: 'order data', columns: [ 'OrderID' (STRING), 'AccountID' (STRING), 'ACVAmount' (FLOAT64), 'ExchangeRate' (STRING), 'OrderNumberC' (STRING), 'OrderOwner' (STRING),'OrderRecordType' (STRING, ENUM('New', 'New Subscription', 'Renewal', 'Expansion')), 'OrderStartDate' (DATE), 'OrderEndDate' (DATE), 'Tax' (FLOAT64), 'TCVAmount' (FLOAT64), 'Region' (STRING), 'AccountName' (STRING), 'TermMonths' (FLOAT64), 'ProductFamily' (STRING, ENUM('TiDB Cloud', 'PingCAP Services', 'TiDB Enterprise Subscription', 'PingCAP Training & Exam Services', 'PingCAP Professional Services', 'PingCAP Consulting Services')),'FiscalPeriod' (STRING), 'SigningDate' (DATE, 'order signing date')]

### Foreign keys
# foreign key `salesforce`.`TiDB\_cloud\_tenant` (AccountID) references `salesforce`.`crm\_account` (AccountID) 
# foreign key `salesforce`.`salesforce\_oppo` (AccountID) references `salesforce`.`crm\_account` (AccountID)
# foreign key `model\_fp\_and\_a`.`dws\_salesforce\_activated\_order\_to\_usd\_detail` (AccountID) references `salesforce`.`crm\_account` (AccountID)

### Some question samples. 
# Q1: A cloud paid customer is a user whose cloud billing is greater than 0. So how many customers are there?
# Q2: How many closed won deals in 2022? 
# Q3: What is the average price per customer?

Suppose you are a very senior data engineer. Above are the data tables in biguquery, and some examples of questions answered using these tables. Your need to optimize the data schema so that they can better serve data analysis. Please think step by step by step to answer the following question before starting to optimize these schemas

Question 1: List things (such as incomprehensible table/column definition, missing information/relationships, etc.) that are hard to understand for data analysis
Question 2: List the optimization suggestions
Question 3: List any other ideas
### 빅쿼리 테이블, 
# 데이터세트:salesforce, 테이블: crm\_account, 설명: '고객 정보', 컬럼: ['AccountID' (문자열, 설명('고객 ID')), 'AccountName' (문자열), 'Industry' (문자열), 'Region' (문자열), 'CreateTime' (데이터타임), 'UpdateTime' (데이터타임), 'Segmentation' (문자열, ENUM('SKA', 'KA', 'SMB'), 설명('고객 우선순위')]
# 데이터세트:salesforce, table: TiDB\_cloud\_tenant, 설명: 'TiDB 클라우드 테넌트 정보', 칼럼: [ '테넌트ID' (문자열), '계정ID' (문자열), '생성시간' (날짜시간), '상태' (문자열), '주문유형' (문자열, ENUM('', '알 수 없음', '온디맨드', '약정플랜', '유료 PoC'))]]
# 데이터셋:salesforce, 테이블: salesforce\_oppo, 설명: '비즈니스 기회 데이터', 컬럼: [ 'OppoID' (문자열), 'OpportunityName' (문자열), 'OpportunityScore' (문자열), 'ACVAmount' (FLOAT64), 'ExchangeRate' (FLOAT64), 'CloseDate' (DATE), 'ForecastCategory' (문자열, ENUM('Omitted', 'Pipeline', 'Best Case', 'Closed', 'Commit')), 'LighthouseLogo' (STRING), 'Probability' (FLOAT64), 'ProductFamily' (STRING, ENUM('TiDB 클라우드', 'PingCAP 서비스', 'TiDB 기업구독', 'PingCAP 교육 및 시험 서비스', 'PingCAP 전문 서비스'), 'PingCAP 컨설팅 서비스')), '지역' (문자열), '단계' (문자열, ENUM('마감유찰', '프로스펙팅', '평가', '자격', '입찰/협상', '마감낙찰', '계약심사')), 'TechnicalScenario' (문자열, ENUM('실시간 HTAP', '확장형 OLTP', 'TiKV')), 'AccountId' (STRING), 'OpportunityRecordType' (STRING, ENUM('신규', '신규가입', '갱신', '확장')), 'LossReason' (STRING), 'CreatedDate' (DATE)]
# 데이터세트:모델\_FP\_and\_a, 테이블: salesforce\_activated\_order, 설명: '주문 데이터', 컬럼: [ 'OrderID' (문자열), 'AccountID' (문자열), 'ACVAmount' (FLOAT64), 'ExchangeRate' (문자열), 'OrderNumberC' (문자열), 'OrderOwner' (문자열), 'OrderRecordType' (문자열, ENUM('신규', '신규 구독', '갱신', '확장')), 'OrderStartDate' (DATE), 'OrderEndDate' (DATE), 'Tax' (FLOAT64), 'TCVAmount' (FLOAT64), 'Region' (STRING)), 'AccountName' (STRING), 'TermMonths' (FLOAT64), 'ProductFamily' (STRING, ENUM('TiDB 클라우드', 'PingCAP 서비스', 'TiDB 기업구독', 'PingCAP 교육 및 시험 서비스', 'PingCAP 전문 서비스', 'PingCAP 컨설팅 서비스')), 'FiscalPeriod' (STRING), 'SigningDate' (DATE, '주문 서명일')]

### 외래 키
# 외래 키 `salesforce`.`TiDB\_cloud\_tenant`(AccountID)가 `salesforce`.`crm\_account`(AccountID)를 참조합니다. 
# 외래 키 `salesforce`.`salesforce\_oppo`(AccountID)가 `salesforce`.`crm\_account`(AccountID)를 참조합니다.
# 외래 키 `model\_fp\_and\_a`.`dws\_salesforce\_activated\_order\_to\_usd\_detail`(AccountID)이 `salesforce`.`crm\_account`(AccountID)를 참조합니다.

### 몇 가지 질문 샘플. 
# Q1: 클라우드 유료 고객은 클라우드 청구액이 0보다 큰 사용자를 말합니다. 그렇다면 고객은 몇 명인가요?
# Q2: 2022년 원화 거래 성사 건수는 몇 건인가요? 
# Q3: 고객당 평균 가격은 얼마인가요?

여러분이 아주 선임 데이터 엔지니어라고 가정해 보겠습니다. 위는 빅쿼리의 데이터 테이블과 이 테이블을 사용하여 답변한 몇 가지 질문의 예입니다. 데이터 분석을 더 잘 수행할 수 있도록 데이터 스키마를 최적화해야 합니다. 이러한 스키마 최적화를 시작하기 전에 다음 질문에 대한 답을 단계별로 생각해 보시기 바랍니다.

질문 1: 데이터 분석을 위해 이해하기 어려운 사항(예: 이해할 수 없는 테이블/열 정의, 누락된 정보/관계 등)을 나열하세요.
질문 2: 최적화 제안 사항 나열
질문 3: 기타 아이디어 나열