> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-home-button.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> OpenCelliD 데이터를 ClickHouse에 로드하고, Apache Superset을 ClickHouse에 연결해 데이터를 기반으로 대시보드를 만드는 방법을 알아봅니다

# 기지국 데이터셋을 활용한 Geo 데이터

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

<div id="goal">
  ## 목표
</div>

이 가이드에서는 다음을 알아봅니다:

* OpenCelliD 데이터를 ClickHouse에 로드하는 방법
* Apache Superset을 ClickHouse에 연결하는 방법
* 데이터셋에서 사용할 수 있는 데이터를 기반으로 대시보드를 구축하는 방법

다음은 이 가이드에서 만드는 대시보드의 미리보기입니다:

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-cell-tower-dashboard.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=c72746389dd5c7065ffa68a65bf22c34" size="md" alt="mcc 204의 무선 유형별 기지국 대시보드" width="1103" height="1014" data-path="images/getting-started/example-datasets/superset-cell-tower-dashboard.png" />

<div id="get-the-dataset">
  ## 데이터셋 가져오기
</div>

이 데이터셋은 [OpenCelliD](https://www.opencellid.org/)의 것으로, 세계 최대 규모의 기지국 오픈 데이터베이스입니다.

2021년 기준으로, 전 세계 기지국(GSM, LTE, UMTS 등)에 대한 4천만 개 이상의 레코드와 지리 좌표 및 메타데이터(국가 코드, 네트워크 등)를 포함하고 있습니다.

OpenCelliD Project는 Creative Commons Attribution-ShareAlike 4.0 International License에 따라 제공되며, 동일한 라이선스 약관에 따라 이 데이터셋의 스냅샷을 재배포합니다. 최신 버전의 데이터셋은 로그인한 후 다운로드할 수 있습니다.

<Tabs>
  <Tab title="ClickHouse Cloud">
    ### 샘플 데이터 로드

    ClickHouse Cloud는 이 데이터셋을 S3에서 업로드할 수 있는 간편한 옵션을 제공합니다. [ClickHouse.cloud](https://clickhouse.cloud)에서 ClickHouse Cloud 조직에 로그인하거나 무료 체험판을 만드십시오.

    서비스를 선택한 후 `Data sources` -> `Predefined sample data`를 클릭하십시오.

    <Image size="md" img="https://mintcdn.com/private-7c7dfe99-home-button/kULrYc6Yc_Td1RKY/images/_snippets/cloud-service-actions-menu.png?fit=max&auto=format&n=kULrYc6Yc_Td1RKY&q=85&s=2809c3be46bda07f9455c1df69c107b1" alt="Data sources 및 Predefined sample data 옵션이 표시된 ClickHouse Cloud 서비스 작업 메뉴" border width="3836" height="2138" data-path="images/_snippets/cloud-service-actions-menu.png" />

    **샘플 데이터** 탭에서 **기지국** 데이터셋을 선택한 다음 **데이터 로드**를 클릭하십시오:

    <Image img="https://mintcdn.com/private-7c7dfe99-home-button/kULrYc6Yc_Td1RKY/images/_snippets/cloud-load-data-sample.png?fit=max&auto=format&n=kULrYc6Yc_Td1RKY&q=85&s=70a95d8062b70a6d6de49c35a8d7c877" size="md" alt="기지국 데이터셋 로드" width="3838" height="2146" data-path="images/_snippets/cloud-load-data-sample.png" />

    ### cell\_towers 테이블의 스키마 확인

    ```sql theme={null}
    DESCRIBE TABLE cell_towers
    ```

    <Tip>
      **SQL 콘솔**

      SQL 클라이언트 연결이 필요한 경우, ClickHouse Cloud 서비스에는 연결된 웹 기반 SQL 콘솔이 제공됩니다. 자세한 내용은 아래의 **SQL 콘솔에 연결**을 펼쳐 확인하십시오.
    </Tip>

    <Accordion title="SQL 콘솔에 연결">
      ClickHouse Cloud 서비스 목록에서 서비스를 클릭하십시오.

      <Image img="https://mintcdn.com/private-7c7dfe99-home-button/kULrYc6Yc_Td1RKY/images/_snippets/cloud-connect-to-sql-console.png?fit=max&auto=format&n=kULrYc6Yc_Td1RKY&q=85&s=9866764462f71224f811181a4df74dd7" alt="SQL 콘솔에 연결" size="lg" force border width="3840" height="2160" data-path="images/_snippets/cloud-connect-to-sql-console.png" />

      그러면 SQL 콘솔로 이동합니다.

      <Image img="https://mintcdn.com/private-7c7dfe99-home-button/iOJBcv5hu2da8lsi/images/_snippets/createservice8.png?fit=max&auto=format&n=iOJBcv5hu2da8lsi&q=85&s=d2a6b4bfe1023420f87d833046b3e45f" alt="SQL 콘솔" size="lg" force border width="3200" height="1800" data-path="images/_snippets/createservice8.png" />
    </Accordion>

    다음은 `DESCRIBE`의 출력입니다. 필드 유형 선택에 대해서는 이 가이드의 뒤쪽에서 설명합니다.

    ```response theme={null}
    ┌─name──────────┬─type──────────────────────────────────────────────────────────────────┬
    │ radio         │ Enum8('' = 0, 'CDMA' = 1, 'GSM' = 2, 'LTE' = 3, 'NR' = 4, 'UMTS' = 5) │
    │ mcc           │ UInt16                                                                │
    │ net           │ UInt16                                                                │
    │ area          │ UInt16                                                                │
    │ cell          │ UInt64                                                                │
    │ unit          │ Int16                                                                 │
    │ lon           │ Float64                                                               │
    │ lat           │ Float64                                                               │
    │ range         │ UInt32                                                                │
    │ samples       │ UInt32                                                                │
    │ changeable    │ UInt8                                                                 │
    │ created       │ DateTime                                                              │
    │ updated       │ DateTime                                                              │
    │ averageSignal │ UInt8                                                                 │
    └───────────────┴───────────────────────────────────────────────────────────────────────┴
    ```
  </Tab>

  <Tab title="자가 관리형">
    1. 테이블을 생성합니다:

    ```sql theme={null}
    CREATE TABLE cell_towers
    (
        radio Enum8('' = 0, 'CDMA' = 1, 'GSM' = 2, 'LTE' = 3, 'NR' = 4, 'UMTS' = 5),
        mcc UInt16,
        net UInt16,
        area UInt16,
        cell UInt64,
        unit Int16,
        lon Float64,
        lat Float64,
        range UInt32,
        samples UInt32,
        changeable UInt8,
        created DateTime,
        updated DateTime,
        averageSignal UInt8
    )
    ENGINE = MergeTree ORDER BY (radio, mcc, net, created);
    ```

    2. 공개 S3 버킷(686 MB)에서 데이터셋을 가져옵니다:

    ```sql theme={null}
    INSERT INTO cell_towers SELECT * FROM s3('https://datasets-documentation.s3.amazonaws.com/cell_towers/cell_towers.csv.xz', 'CSVWithNames')
    ```
  </Tab>
</Tabs>

<div id="examples">
  ## 예시 쿼리 몇 가지 실행하기
</div>

1. 유형별 기지국 수:

```sql theme={null}
SELECT radio, count() AS c FROM cell_towers GROUP BY radio ORDER BY c DESC
```

```response theme={null}
┌─radio─┬────────c─┐
│ UMTS  │ 20686487 │
│ LTE   │ 12101148 │
│ GSM   │  9931304 │
│ CDMA  │   556344 │
│ NR    │      867 │
└───────┴──────────┘

5 rows in set. Elapsed: 0.011 sec. Processed 43.28 million rows, 43.28 MB (3.83 billion rows/s., 3.83 GB/s.)
```

2. [모바일 국가 코드(MCC)](https://en.wikipedia.org/wiki/Mobile_country_code)별 기지국:

```sql theme={null}
SELECT mcc, count() FROM cell_towers GROUP BY mcc ORDER BY count() DESC LIMIT 10
```

```response theme={null}
┌─mcc─┬─count()─┐
│ 310 │ 5024650 │
│ 262 │ 2622423 │
│ 250 │ 1953176 │
│ 208 │ 1891187 │
│ 724 │ 1836150 │
│ 404 │ 1729151 │
│ 234 │ 1618924 │
│ 510 │ 1353998 │
│ 440 │ 1343355 │
│ 311 │ 1332798 │
└─────┴─────────┘

10 rows in set. Elapsed: 0.019 sec. Processed 43.28 million rows, 86.55 MB (2.33 billion rows/s., 4.65 GB/s.)
```

위 쿼리와 [MCC list](https://en.wikipedia.org/wiki/Mobile_country_code)를 기준으로 하면, 기지국이 가장 많은 국가는 미국, 독일, 러시아입니다.

이 값들을 해석하려면 ClickHouse에서 [딕셔너리](/ko/reference/statements/create/dictionary)를 생성하는 것이 좋습니다.

<div id="use-case">
  ## 사용 사례: Geo 데이터 활용
</div>

[`pointInPolygon`](/ko/reference/functions/regular-functions/geo/coordinates#pointinpolygon) 함수를 사용합니다.

1. 다각형을 저장할 테이블을 생성합니다.

<Tabs>
  <Tab title="ClickHouse Cloud">
    ```sql theme={null}
    CREATE TABLE moscow (polygon Array(Tuple(Float64, Float64)))
    ORDER BY polygon;
    ```
  </Tab>

  <Tab title="자가 관리형">
    ```sql theme={null}
    CREATE TEMPORARY TABLE
    moscow (polygon Array(Tuple(Float64, Float64)));
    ```
  </Tab>
</Tabs>

2. 다음은 모스크바의 대략적인 윤곽입니다("new Moscow" 제외).

```sql theme={null}
INSERT INTO moscow VALUES ([(37.84172564285271, 55.78000432402266),
(37.8381207618713, 55.775874525970494), (37.83979446823122, 55.775626746008065), (37.84243326983639, 55.77446586811748), (37.84262672750849, 55.771974101091104), (37.84153238623039, 55.77114545193181), (37.841124690460184, 55.76722010265554),
(37.84239076983644, 55.76654891107098), (37.842283558197025, 55.76258709833121), (37.8421759312134, 55.758073999993734), (37.84198330422974, 55.75381499999371), (37.8416827275085, 55.749277102484484), (37.84157576190186, 55.74794544108413),
(37.83897929098507, 55.74525257875241), (37.83739676451868, 55.74404373042019), (37.838732481460525, 55.74298009816793), (37.841183997352545, 55.743060321833575), (37.84097476190185, 55.73938799999373), (37.84048155819702, 55.73570799999372),
(37.840095812164286, 55.73228210777237), (37.83983814285274, 55.73080491981639), (37.83846476321406, 55.729799917464675), (37.83835745269769, 55.72919751082619), (37.838636380279524, 55.72859509486539), (37.8395161005249, 55.727705075632784),
(37.83897964285276, 55.722727886185154), (37.83862557539366, 55.72034817326636), (37.83559735744853, 55.71944437307499), (37.835370708803126, 55.71831419154461), (37.83738169402022, 55.71765218986692), (37.83823396494291, 55.71691750159089),
(37.838056931213345, 55.71547311301385), (37.836812846557606, 55.71221445615604), (37.83522525396725, 55.709331054395555), (37.83269301586908, 55.70953687463627), (37.829667367706236, 55.70903403789297), (37.83311126588435, 55.70552351822608),
(37.83058993121339, 55.70041317726053), (37.82983872750851, 55.69883771404813), (37.82934501586913, 55.69718947487017), (37.828926414016685, 55.69504441658371), (37.82876530422971, 55.69287499999378), (37.82894754100031, 55.690759754047335),
(37.827697554878185, 55.68951421135665), (37.82447346292115, 55.68965045405069), (37.83136543914793, 55.68322046195302), (37.833554015869154, 55.67814012759211), (37.83544184655761, 55.67295011628339), (37.837480388885474, 55.6672498719639),
(37.838960677246064, 55.66316274139358), (37.83926093121332, 55.66046999999383), (37.839025050262435, 55.65869897264431), (37.83670784390257, 55.65794084879904), (37.835656529083245, 55.65694309303843), (37.83704060449217, 55.65689306460552),
(37.83696819873806, 55.65550363526252), (37.83760389616388, 55.65487847246661), (37.83687972750851, 55.65356745541324), (37.83515216004943, 55.65155951234079), (37.83312418518067, 55.64979413590619), (37.82801726983639, 55.64640836412121),
(37.820614174591, 55.64164525405531), (37.818908190475426, 55.6421883258084), (37.81717543386075, 55.64112490388471), (37.81690987037274, 55.63916106913107), (37.815099354492155, 55.637925371757085), (37.808769150787356, 55.633798276884455),
(37.80100123544311, 55.62873670012244), (37.79598013491824, 55.62554336109055), (37.78634567724606, 55.62033499605651), (37.78334147619623, 55.618768681480326), (37.77746201055901, 55.619855533402706), (37.77527329626457, 55.61909966711279),
(37.77801986242668, 55.618770300976294), (37.778212973541216, 55.617257701952106), (37.77784818518065, 55.61574504433011), (37.77016867724609, 55.61148576294007), (37.760191219573976, 55.60599579539028), (37.75338926983641, 55.60227892751446),
(37.746329965606634, 55.59920577639331), (37.73939925396728, 55.59631430313617), (37.73273665739439, 55.5935318803559), (37.7299954450912, 55.59350760316188), (37.7268679946899, 55.59469840523759), (37.72626726983634, 55.59229549697373),
(37.7262673598022, 55.59081598950582), (37.71897193121335, 55.5877595845419), (37.70871550793456, 55.58393177431724), (37.700497489410374, 55.580917323756644), (37.69204305026244, 55.57778089778455), (37.68544477378839, 55.57815154690915),
(37.68391050793454, 55.57472945079756), (37.678803592590306, 55.57328235936491), (37.6743402539673, 55.57255251445782), (37.66813862698363, 55.57216388774464), (37.617927457672096, 55.57505691895805), (37.60443099999999, 55.5757737568051),
(37.599683515869145, 55.57749105910326), (37.59754177842709, 55.57796291823627), (37.59625834786988, 55.57906686095235), (37.59501783265684, 55.57746616444403), (37.593090671936025, 55.57671634534502), (37.587018007904, 55.577944600233785),
(37.578692203704804, 55.57982895000019), (37.57327546607398, 55.58116294118248), (37.57385012109279, 55.581550362779), (37.57399562266922, 55.5820107079112), (37.5735356072979, 55.58226289171689), (37.57290393054962, 55.582393529795155),
(37.57037722355653, 55.581919415056234), (37.5592298306885, 55.584471614867844), (37.54189249206543, 55.58867650795186), (37.5297256269836, 55.59158133551745), (37.517837865081766, 55.59443656218868), (37.51200186508174, 55.59635625174229),
(37.506808949737554, 55.59907823904434), (37.49820432275389, 55.6062944994944), (37.494406071441674, 55.60967103463367), (37.494760001358024, 55.61066689753365), (37.49397137107085, 55.61220931698269), (37.49016528606031, 55.613417718449064),
(37.48773249206542, 55.61530616333343), (37.47921386508177, 55.622640129112334), (37.470652153442394, 55.62993723476164), (37.46273446298218, 55.6368075123157), (37.46350692265317, 55.64068225239439), (37.46050283203121, 55.640794546982576),
(37.457627470916734, 55.64118904154646), (37.450718034393326, 55.64690488145138), (37.44239252645875, 55.65397824729769), (37.434587576721185, 55.66053543155961), (37.43582144975277, 55.661693766520735), (37.43576786245721, 55.662755031737014),
(37.430982915344174, 55.664610641628116), (37.428547447097685, 55.66778515273695), (37.42945134592044, 55.668633314343566), (37.42859571562949, 55.66948145750025), (37.4262836402282, 55.670813882451405), (37.418709037048295, 55.6811141674414),
(37.41922139651101, 55.68235377885389), (37.419218771842885, 55.68359335082235), (37.417196501327446, 55.684375235224735), (37.41607020370478, 55.68540557585352), (37.415640857147146, 55.68686637150793), (37.414632153442334, 55.68903015131686),
(37.413344899475064, 55.690896881757396), (37.41171432275391, 55.69264232162232), (37.40948282275393, 55.69455101638112), (37.40703674603271, 55.69638690385348), (37.39607169577025, 55.70451821283731), (37.38952706878662, 55.70942491932811),
(37.387778313491815, 55.71149057784176), (37.39049275399779, 55.71419814298992), (37.385557272491454, 55.7155489617061), (37.38388335714726, 55.71849856042102), (37.378368238098155, 55.7292763261685), (37.37763597123337, 55.730845879211614),
(37.37890062088197, 55.73167906388319), (37.37750451918789, 55.734703664681774), (37.375610832015965, 55.734851959522246), (37.3723813571472, 55.74105626086403), (37.37014935714723, 55.746115620904355), (37.36944173016362, 55.750883999993725),
(37.36975304365541, 55.76335905525834), (37.37244070571134, 55.76432079697595), (37.3724259757175, 55.76636979670426), (37.369922155757884, 55.76735417953104), (37.369892695770275, 55.76823419316575), (37.370214730163575, 55.782312184391266),
(37.370493611114505, 55.78436801120489), (37.37120164550783, 55.78596427165359), (37.37284851456452, 55.7874378183096), (37.37608325135799, 55.7886695054807), (37.3764587460632, 55.78947647305964), (37.37530000265506, 55.79146512926804),
(37.38235915344241, 55.79899647809345), (37.384344043655396, 55.80113596939471), (37.38594269577028, 55.80322699999366), (37.38711208598329, 55.804919036911976), (37.3880239841309, 55.806610999993666), (37.38928977249147, 55.81001864976979),
(37.39038389947512, 55.81348641242801), (37.39235781481933, 55.81983538336746), (37.393709457672124, 55.82417822811877), (37.394685720901464, 55.82792275755836), (37.39557615344238, 55.830447148154136), (37.39844478226658, 55.83167107969975),
(37.40019761214057, 55.83151823557964), (37.400398790382326, 55.83264967594742), (37.39659544313046, 55.83322180909622), (37.39667059524539, 55.83402792148566), (37.39682089947515, 55.83638877400216), (37.39643489154053, 55.83861656112751),
(37.3955338994751, 55.84072348043264), (37.392680272491454, 55.84502158126453), (37.39241188227847, 55.84659117913199), (37.392529730163616, 55.84816071336481), (37.39486835714723, 55.85288092980303), (37.39873052645878, 55.859893456073635),
(37.40272161111449, 55.86441833633205), (37.40697072750854, 55.867579567544375), (37.410007082016016, 55.868369880337), (37.4120992989502, 55.86920843741314), (37.412668021163924, 55.87055369615854), (37.41482461111453, 55.87170587948249),
(37.41862266137694, 55.873183961039565), (37.42413732540892, 55.874879126654704), (37.4312182698669, 55.875614937236705), (37.43111093783558, 55.8762723478417), (37.43332105622856, 55.87706546369396), (37.43385747619623, 55.87790681284802),
(37.441303050262405, 55.88027084462084), (37.44747234260555, 55.87942070143253), (37.44716141796871, 55.88072960917233), (37.44769797085568, 55.88121221323979), (37.45204320500181, 55.882080694420715), (37.45673176190186, 55.882346110794586),
(37.463383999999984, 55.88252729504517), (37.46682797486874, 55.88294937719063), (37.470014457672086, 55.88361266759345), (37.47751410450743, 55.88546991372396), (37.47860317658232, 55.88534929207307), (37.48165826025772, 55.882563306475106),
(37.48316434442331, 55.8815803226785), (37.483831555817645, 55.882427612793315), (37.483182967125686, 55.88372791409729), (37.483092277908824, 55.88495581062434), (37.4855716508179, 55.8875561994203), (37.486440636245746, 55.887827444039566),
(37.49014203439328, 55.88897899871799), (37.493210285705544, 55.890208937135604), (37.497512451065035, 55.891342397444696), (37.49780744510645, 55.89174030252967), (37.49940333499519, 55.89239745507079), (37.50018383334346, 55.89339220941865),
(37.52421672750851, 55.903869074155224), (37.52977457672118, 55.90564076517974), (37.53503220370484, 55.90661661218259), (37.54042858064267, 55.90714113744566), (37.54320461007303, 55.905645048442985), (37.545686966066306, 55.906608607018505),
(37.54743976120755, 55.90788552162358), (37.55796999999999, 55.90901557907218), (37.572711542327866, 55.91059395704873), (37.57942799999998, 55.91073854155573), (37.58502865872187, 55.91009969268444), (37.58739968913264, 55.90794809960554),
(37.59131567193598, 55.908713267595054), (37.612687423278814, 55.902866854295375), (37.62348079629517, 55.90041967242986), (37.635797880950896, 55.898141151686396), (37.649487626983664, 55.89639275532968), (37.65619302513125, 55.89572360207488),
(37.66294133862307, 55.895295577183965), (37.66874564418033, 55.89505457604897), (37.67375601586915, 55.89254677027454), (37.67744661901856, 55.8947775867987), (37.688347, 55.89450045676125), (37.69480554232789, 55.89422926332761),
(37.70107096560668, 55.89322256101114), (37.705962965606716, 55.891763491662616), (37.711885134918205, 55.889110234998974), (37.71682005026245, 55.886577568759876), (37.7199315476074, 55.88458159806678), (37.72234560316464, 55.882281005794134),
(37.72364385977171, 55.8809452036196), (37.725371142837474, 55.8809722706006), (37.727870902099546, 55.88037213862385), (37.73394330422971, 55.877941504088696), (37.745339592590376, 55.87208120378722), (37.75525267724611, 55.86703807949492),
(37.76919976190188, 55.859821640197474), (37.827835219574, 55.82962968399116), (37.83341438888553, 55.82575289922351), (37.83652584655761, 55.82188784027888), (37.83809213491821, 55.81612575504693), (37.83605359521481, 55.81460347077685),
(37.83632178569025, 55.81276696067908), (37.838623105812026, 55.811486181656385), (37.83912198147584, 55.807329380532785), (37.839079078033414, 55.80510270463816), (37.83965844708251, 55.79940712529036), (37.840581150787344, 55.79131399999368),
(37.84172564285271, 55.78000432402266)]);
```

3. 모스크바의 기지국 수를 확인하세요:

```sql theme={null}
SELECT count() FROM cell_towers
WHERE pointInPolygon((lon, lat), (SELECT * FROM moscow))
```

```response theme={null}
┌─count()─┐
│  310463 │
└─────────┘

1 rows in set. Elapsed: 0.067 sec. Processed 43.28 million rows, 692.42 MB (645.83 million rows/s., 10.33 GB/s.)
```

<div id="review-of-the-schema">
  ## 스키마 검토
</div>

Superset에서 시각화를 만들기 전에 사용할 컬럼을 먼저 살펴보십시오. 이 데이터셋은 주로 전 세계 이동통신 기지국의 위치(경도와 위도)와 무선 기술 유형을 제공합니다. 컬럼 설명은 [community forum](https://community.opencellid.org/t/documenting-the-columns-in-the-downloadable-cells-database-csv/186)에서 확인할 수 있습니다. 아래에는 앞으로 만들 시각화에 사용되는 컬럼을 설명합니다.

다음은 OpenCelliD 포럼에서 가져온 컬럼 설명입니다.

| 컬럼    | 설명                            |
| ----- | ----------------------------- |
| radio | 기술 세대: CDMA, GSM, UMTS, 5G NR |
| mcc   | 모바일 국가 코드: `204`는 네덜란드        |
| lon   | 경도: 위도와 함께 기지국의 대략적인 위치를 나타냄  |
| lat   | 위도: 경도와 함께 기지국의 대략적인 위치를 나타냄  |

<Tip>
  **mcc**

  MCC를 찾으려면 [Mobile network codes](https://en.wikipedia.org/wiki/Mobile_country_code)를 확인한 뒤, **모바일 국가 코드** 컬럼의 세 자리 숫자를 사용하십시오.
</Tip>

이 테이블의 스키마는 디스크에서 compact하게 저장하고 쿼리 속도를 높일 수 있도록 설계되었습니다.

* `radio` 데이터는 문자열이 아니라 `Enum8`(`UInt8`)로 저장됩니다.
* `mcc`, 즉 모바일 국가 코드는 값의 범위가 1\~999이므로 `UInt16`으로 저장됩니다.
* `lon`과 `lat`는 `Float64`입니다.

이 가이드의 쿼리나 시각화에서는 다른 필드를 사용하지 않지만, 관심이 있다면 위에 링크된 포럼에서 해당 필드 설명도 확인할 수 있습니다.

<div id="build-visualizations-with-apache-superset">
  ## Apache Superset으로 시각화 만들기
</div>

Superset은 Docker에서 쉽게 실행할 수 있습니다. 이미 Superset을 실행 중이라면 `pip install clickhouse-connect`로 ClickHouse Connect만 추가하면 됩니다. Superset을 설치해야 한다면 바로 아래의 **Docker에서 Apache Superset 실행**을 여십시오.

<Accordion title="Docker에서 Apache Superset 실행">
  Superset은 [Docker Compose를 사용해 로컬에서 Superset을 설치하는 방법](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose/)을 제공합니다. GitHub에서 Apache Superset 리포지토리를 체크아웃한 후 최신 개발 코드를 실행하거나 특정 태그를 지정해 실행할 수 있습니다. `pre-release`로 표시되지 않은 최신 릴리스이므로 2.0.0 릴리스를 권장합니다.

  `docker compose`를 실행하기 전에 몇 가지 작업을 수행해야 합니다:

  1. 공식 ClickHouse Connect 드라이버 추가
  2. Mapbox API Key를 발급받아 환경 변수로 추가(선택 사항)
  3. 실행할 Superset 버전 지정

  <Tip>
    아래 명령은 GitHub 리포지토리 `superset`의 최상위 디렉터리에서 실행해야 합니다.
  </Tip>

  ## 공식 ClickHouse connect driver

  Superset 배포에서 ClickHouse Connect 드라이버를 사용할 수 있도록 로컬 requirements 파일에 추가합니다:

  ```bash theme={null}
  echo "clickhouse-connect" >> ./docker/requirements-local.txt
  ```

  ## Mapbox

  이는 선택 사항입니다. Mapbox API Key 없이도 Superset에서 위치 데이터를 표시할 수 있지만, 키를 추가해야 한다는 메시지가 표시되고 지도 배경 이미지는 나타나지 않습니다(데이터 포인트만 보이고 지도 배경은 보이지 않습니다). 원하면 Mapbox의 무료 플랜을 사용할 수 있습니다.

  가이드에서 생성하는 일부 예시 시각화는 경도와 위도 같은 위치 데이터를 사용합니다. Superset은 Mapbox 지도도 지원합니다. Mapbox 시각화를 사용하려면 Mapbox API Key가 필요합니다. [Mapbox 무료 플랜](https://account.mapbox.com/auth/signup/)에 가입한 후 API Key를 생성하십시오.

  Superset에서 API Key를 사용할 수 있도록 설정합니다:

  ```bash theme={null}
  echo "MAPBOX_API_KEY=pk.SAMPLE-Use-your-key-instead" >> docker/.env-non-dev
  ```

  ## Superset 버전 2.0.0 배포

  2.0.0 릴리스를 배포하려면 다음을 실행합니다:

  ```bash theme={null}
  git checkout 2.0.0
  TAG=2.0.0 docker-compose -f docker-compose-non-dev.yml pull
  TAG=2.0.0 docker-compose -f docker-compose-non-dev.yml up
  ```
</Accordion>

OpenCelliD 데이터셋을 사용해 Superset 대시보드를 만들려면 다음을 수행하십시오.

* ClickHouse 서비스를 Superset **데이터베이스**로 추가합니다.
* **cell\_towers** 테이블을 Superset **데이터셋**으로 추가합니다.
* 몇 가지 **차트**를 만듭니다.
* 차트를 **대시보드**에 추가합니다.

<div id="add-your-clickhouse-service-as-a-superset-database">
  ### Superset에 ClickHouse 서비스를 데이터베이스로 추가
</div>

HTTP(S)로 ClickHouse에 연결하려면 다음 정보가 필요합니다.

| 매개변수                      | 설명                                                         |
| ------------------------- | ---------------------------------------------------------- |
| `HOST` and `PORT`         | 일반적으로 TLS를 사용하는 경우 포트는 8443, TLS를 사용하지 않는 경우 8123입니다.      |
| `DATABASE NAME`           | 기본적으로 `default`라는 이름의 데이터베이스가 제공되며, 연결할 데이터베이스 이름을 사용하십시오. |
| `USERNAME` and `PASSWORD` | 기본 사용자 이름은 `default`입니다. 사용 사례에 맞는 사용자 이름을 사용하십시오.         |

ClickHouse Cloud 서비스의 연결 정보는 ClickHouse Cloud 콘솔에서 확인할 수 있습니다.
서비스를 선택한 다음 **Connect**를 클릭하십시오.

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/kULrYc6Yc_Td1RKY/images/_snippets/cloud-connect-button.png?fit=max&auto=format&n=kULrYc6Yc_Td1RKY&q=85&s=f8f30304147d67b79b22a095be5c28d9" size="md" alt="ClickHouse Cloud 서비스 연결 버튼" border width="998" height="932" data-path="images/_snippets/cloud-connect-button.png" />

**HTTPS**를 선택하십시오. 연결 정보가 예시 `curl` 명령으로 표시됩니다.

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/kULrYc6Yc_Td1RKY/images/_snippets/connection-details-https.png?fit=max&auto=format&n=kULrYc6Yc_Td1RKY&q=85&s=e0ad7ca41bc3d183bee88082e548cd76" size="md" alt="ClickHouse Cloud HTTPS 연결 정보" border width="1320" height="1184" data-path="images/_snippets/connection-details-https.png" />

자가 관리형 ClickHouse를 사용하는 경우 연결 정보는 ClickHouse 관리자가 설정합니다.

Superset에서는 데이터베이스 유형을 선택한 다음 연결 정보를 입력하여 데이터베이스를 추가할 수 있습니다. Superset을 열고 \*\*+\*\*를 찾으십시오. **Data**를 선택한 다음 **Connect database** 옵션을 클릭하십시오.

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-add.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=56ee56c20aab0700112f513d7cef1d11" size="md" alt="데이터베이스 추가" width="636" height="264" data-path="images/getting-started/example-datasets/superset-add.png" />

목록에서 **ClickHouse Connect**를 선택하십시오.

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-choose-a-database.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=1559ea7a8a3b7a9942faca991cc3f32c" size="md" alt="데이터베이스 유형으로 ClickHouse Connect 선택" width="594" height="751" data-path="images/getting-started/example-datasets/superset-choose-a-database.png" />

<Note>
  **ClickHouse Connect**가 옵션에 없으면 설치해야 합니다. 명령은 `pip install clickhouse-connect`이며, 자세한 내용은 [여기](https://pypi.org/project/clickhouse-connect/)에서 확인할 수 있습니다.
</Note>

<div id="add-your-connection-details">
  #### 연결 정보 추가
</div>

<Tip>
  ClickHouse Cloud 또는 SSL 사용이 필수인 다른 ClickHouse 시스템에 연결할 때는 **SSL**을 반드시 활성화하십시오.
</Tip>

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-connect-a-database.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=115188a68d02b490cbd69d44556523bc" size="md" alt="Superset 데이터 소스로 ClickHouse 추가" width="604" height="983" data-path="images/getting-started/example-datasets/superset-connect-a-database.png" />

<div id="add-the-table-cell_towers-as-a-superset-dataset">
  ### 테이블 **cell\_towers**를 Superset **데이터셋**으로 추가하기
</div>

Superset에서 **데이터셋**은 데이터베이스의 테이블에 해당합니다. "add a dataset"를 클릭한 다음 ClickHouse 서비스, 테이블이 포함된 데이터베이스(`default`), 그리고 `cell_towers` 테이블을 선택합니다:

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-add-dataset.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=45c55c49ab9e7c219473caccd9cfd8a6" size="md" alt="cell_towers 테이블을 데이터셋으로 추가" width="715" height="825" data-path="images/getting-started/example-datasets/superset-add-dataset.png" />

<div id="create-some-charts">
  ### 몇 가지 **차트** 만들기
</div>

Superset에서 차트를 추가할 때는 데이터셋(`cell_towers`)과 차트 유형을 지정해야 합니다. OpenCelliD 데이터셋은 기지국의 경도와 위도 좌표를 제공하므로 **Map** 차트를 만들겠습니다. **deck.gL Scatterplot** 유형은 지도 위의 밀집된 데이터 포인트를 표현하는 데 적합하므로 이 데이터셋에 잘 맞습니다.

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-create-map.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=606f753c13149eda31e28f1115b0db40" size="md" alt="Superset에서 지도 만들기" width="965" height="928" data-path="images/getting-started/example-datasets/superset-create-map.png" />

<div id="specify-the-query-used-for-the-map">
  #### 맵에 사용할 쿼리 지정
</div>

deck.gl Scatterplot에는 경도와 위도가 필요하며, 쿼리에 하나 이상의 필터를 적용할 수도 있습니다. 이 예시에서는 필터 2개를 적용합니다. 하나는 UMTS 라디오를 사용하는 기지국을 위한 필터이고, 다른 하나는 네덜란드에 할당된 모바일 국가 코드를 위한 필터입니다.

`lon` 및 `lat` 필드에는 경도와 위도가 들어 있습니다:

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-lon-lat.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=40fdd5ca4e3d474956e60b2968a4468d" size="md" alt="경도 및 위도 필드 지정" width="436" height="454" data-path="images/getting-started/example-datasets/superset-lon-lat.png" />

`mcc` = `204`인 필터를 추가합니다(또는 다른 `mcc` 값으로 대체할 수 있습니다):

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-mcc-204.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=141f5d969cecdb78a62e2643da84d309" size="md" alt="MCC 204로 필터링" width="421" height="370" data-path="images/getting-started/example-datasets/superset-mcc-204.png" />

`radio` = `'UMTS'`인 필터를 추가합니다(또는 다른 `radio` 값으로 대체할 수 있으며, 선택 가능한 값은 `DESCRIBE TABLE cell_towers` 출력에서 확인할 수 있습니다):

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-radio-umts.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=b26015c07522c04f55f7cfb27b67bdff" size="md" alt="radio가 UMTS인 항목으로 필터링" width="424" height="361" data-path="images/getting-started/example-datasets/superset-radio-umts.png" />

다음은 `radio = 'UMTS'` 및 `mcc = 204`로 필터링하는 차트의 전체 구성입니다:

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-umts-netherlands.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=8f6f775904228eb9aa9643a5c7b75842" size="md" alt="MCC 204의 UMTS 라디오 차트" width="395" height="872" data-path="images/getting-started/example-datasets/superset-umts-netherlands.png" />

시각화를 렌더링하려면 **UPDATE CHART**를 클릭합니다.

<div id="add-the-charts-to-a-dashboard">
  ### 차트를 **대시보드**에 추가하기
</div>

이 스크린샷은 LTE, UMTS, GSM 라디오를 사용하는 기지국의 위치를 보여줍니다. 차트는 모두 같은 방식으로 만들고, 이를 대시보드에 추가합니다.

<Image img="https://mintcdn.com/private-7c7dfe99-home-button/k6dUBbEUOmZKxz3v/images/getting-started/example-datasets/superset-cell-tower-dashboard.png?fit=max&auto=format&n=k6dUBbEUOmZKxz3v&q=85&s=c72746389dd5c7065ffa68a65bf22c34" size="md" alt="mcc 204의 라디오 유형별 기지국 대시보드" width="1103" height="1014" data-path="images/getting-started/example-datasets/superset-cell-tower-dashboard.png" />

<Tip>
  이 데이터는 [Playground](https://sql.clickhouse.com)에서 대화형 쿼리로도 확인할 수 있습니다.

  이 [예시](https://sql.clickhouse.com?query_id=UV8M4MAGS2PWAUOAYAAARM)를 열면 사용자 이름은 물론 쿼리까지 자동으로 입력됩니다.

  Playground에서는 테이블을 생성할 수 없지만, 모든 쿼리를 실행할 수 있고 Superset도 사용할 수 있습니다(호스트 이름과 포트 번호를 조정하십시오).
</Tip>
