ยินดีต้อนรับสู่ Spellbook เสกคาถาวิเศษเพื่อทำให้บล็อคเชนเชื่อง
Spellbook เป็นเลเยอร์การตีความของ Dune ที่สร้างขึ้นเพื่อและโดยชุมชน
Spellbook เป็นโครงการ dbt แต่ละรุ่นเป็นแบบสอบถาม SQL แบบธรรมดาที่มีน้ำตาลเชิงวากยสัมพันธ์เล็กน้อย (หมายถึงการจับการขึ้นต่อกันและช่วยสร้างตารางผลลัพธ์) และทำงานส่วนเล็กๆ ในการเปลี่ยนบันทึกดิบและถอดรหัสให้เป็นข้อมูลบล็อกเชนที่ตีความได้
Spellbook สร้างขึ้นเพื่อและโดยชุมชน คุณสามารถปิดช่องว่างใดๆ ที่คุณพบได้โดยการส่ง PR สร้างประเด็นเพื่อเสนอการเปลี่ยนแปลงเล็กๆ น้อยๆ หรือติดตามข้อบกพร่อง หรือเข้าร่วมในการสนทนาเพื่อช่วยกำหนดอนาคตของโครงการนี้
Spellbook มีชิ้นส่วนที่เคลื่อนไหวได้มากมายและหลักการออกแบบเฉพาะเพื่อสนับสนุนชั้นการตีความข้อมูลของ Dune เพื่อเตรียมผู้มีส่วนร่วมให้มีส่วนร่วมอย่างมีประสิทธิภาพสูงสุด ไดเร็กทอรีเอกสารประกอบด้วยชุดหัวข้อที่หลากหลายเพื่อตอบคำถามทั่วไปและให้ข้อมูลเกี่ยวกับสาเหตุที่ตั้งค่า repo เหมือนเดิม โปรดอ่านและอ้างอิงส่วนนี้เมื่อพัฒนาใน Spellbook และมีคำถามเกิดขึ้น ทีมงาน Dune จะลิงก์กลับไปยังเอกสารเหล่านี้เพื่อตอบคำถามบ่อยๆ เพื่อช่วยสร้างความตระหนักรู้และรักษาการสื่อสารให้สะอาด
เพื่อขยายขนาด Spellbook ทาง Repo ได้แนะนำโปรเจ็กต์ย่อยเพื่อแยกสายเลือด DBT ที่ซับซ้อนออกไปเล็กน้อย & รักษาพื้นที่โฟกัสให้สะอาด นอกจากนี้ยังจะช่วยประสานปลายน้ำเพื่อรักษาคาถาให้สดใหม่ในการผลิต โปรเจ็กต์ย่อย DBT ใน Spellbook เป็นเพียงโปรเจ็กต์ DBT หลายโปรเจ็กต์ภายใน repo เดียว โครงสร้างปัจจุบันของโครงการ:
dbt_subprojects
daily_spellbook
hourly_spellbook
dex
dex
หรือ dex_aggregator
schema รวมถึงคาถาต้นน้ำเพื่อช่วยสร้างคาถาระดับเซกเตอร์สุดท้ายnft
nft
รวมถึงคาถาต้นน้ำเพื่อช่วยสร้างคาถาระดับเซกเตอร์สุดท้ายsolana
tokens
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโครงการย่อย กรุณาเยี่ยมชมการสนทนานี้ และถามคำถามใดๆ ที่นั่น
ต้องการรับสิทธิในการทำงานหรือไม่? ทำตามคำแนะนำที่นี่เพื่อเริ่มต้น
คุณไม่จำเป็นต้องมีการตั้งค่าท้องถิ่นที่ซับซ้อนเพื่อทดสอบคาถากับเครื่องยนต์ของ Dune เมื่อคุณส่ง PR ไปป์ไลน์ CI ของเราจะรันและทดสอบ และหากงานเสร็จสิ้น คุณจะสามารถสืบค้นข้อมูลที่ PR ของคุณสร้างขึ้นได้โดยตรงจาก dune.com
เพียงเขียนแบบสอบถามเช่นเดียวกับที่คุณทำกับตารางสดของเรา และใช้สคีมาทดสอบเพื่อดึงข้อมูลตารางที่ PR ของคุณสร้างขึ้น
test_schema.git_dunesql_{{commit_hash}}_{{table_name}}
คุณสามารถค้นหาชื่อที่แน่นอนได้อย่างง่ายดายโดยดูบันทึกจากการดำเนินการ dbt slim ci
ภายใต้ dbt run initial model(s)
โปรดทราบ: ตารางทดสอบที่สร้างขึ้นในไปป์ไลน์ CI จะคงอยู่ประมาณ 24 ชั่วโมง หากไม่มีตารางของคุณ ให้ทริกเกอร์ไปป์ไลน์ให้ทำงานอีกครั้งและสร้างตารางทดสอบใหม่
เราใช้ Discord เพื่อเชื่อมต่อกับชุมชนของเรา ไปที่ช่องหนังสือคาถาบน Dune's Discord เพื่อสอบถามหรือขอความช่วยเหลือเกี่ยวกับการประชาสัมพันธ์โดยเฉพาะ เราสนับสนุนให้คุณเรียนรู้โดยการลงมือทำ และใช้ประโยชน์จากชุมชนที่มีชีวิตชีวาของเราเพื่อช่วยให้คุณก้าวต่อไป
git config --global core.autocrlf true
ข้อมูลเพิ่มเติมคุณสามารถรับชมวิดีโอเวอร์ชันนี้ได้หากคุณเลื่อนลงเล็กน้อย
ไปที่ repo ของ Spellbook ภายใน CLI ของคุณ (อินเทอร์เฟซบรรทัดคำสั่ง)
cd userdirectorygithubspellbook
# Change this to wherever spellbook is stored locally on your machine.
ใช้ pipfile ที่อยู่ใน repo ของ Spellbook ให้รันคำสั่งติดตั้งด้านล่างเพื่อสร้าง Pipenv
pipenv install
หากการติดตั้งล้มเหลว สาเหตุที่เป็นไปได้ประการหนึ่งคือสคริปต์ของเราค้นหาเวอร์ชัน Python แบบคงที่ และโอกาสที่จะเกิดข้อผิดพลาดสำหรับเวอร์ชัน Python ที่ไม่ถูกต้องนั้นค่อนข้างสูง หากเกิดข้อผิดพลาดดังกล่าว ให้ตรวจสอบเวอร์ชัน python ของคุณด้วย:
python --version
ตอนนี้ใช้โปรแกรมแก้ไขข้อความใดๆ เพื่อเปลี่ยนเวอร์ชันของ Python ใน pipfile ภายในไดเร็กทอรี Spellbook ไปเป็นเวอร์ชัน Python ของคุณ คุณต้องมี python 3.9 เป็นอย่างน้อย หากคุณเปลี่ยนเวอร์ชันของ python ใน pipfile ให้รัน pipenv install
อีกครั้ง
ตอนนี้คุณพร้อมที่จะเปิดใช้งานสภาพแวดล้อมเสมือนของโปรเจ็กต์นี้แล้ว รันคำสั่งต่อไปนี้เพื่อเข้าสู่สภาพแวดล้อม:
pipenv shell
ตอนนี้คุณได้สร้างสภาพแวดล้อมเสมือนสำหรับโปรเจ็กต์นี้แล้ว คุณสามารถอ่านเพิ่มเติมเกี่ยวกับสภาพแวดล้อมเสมือนได้ที่นี่
ภายใน Spellbook repo มีโปรเจ็กต์ dbt หลายโปรเจ็กต์อยู่ในไดเร็กทอรีราก นำทางไปยังโปรเจ็กต์ที่ถูกต้อง ขึ้นอยู่กับกรณีการใช้งานของคุณ
cd ../spellbook/dbt_subprojects/<subproject_name>/
แต่ละโปรเจ็กต์ย่อยมีไฟล์โปรเจ็กต์ dbt เป็นของตัวเองซึ่งมีการกำหนดค่าที่แตกต่างกัน เมื่อ CLI ของคุณนำทางไปยังไดเร็กทอรีโปรเจ็กต์ที่ถูกต้องแล้ว ให้ทำตามขั้นตอนด้านล่าง:
เพื่อทำความสะอาดโครงการ dbt
dbt clean
หากต้องการดึงการพึ่งพาโปรเจ็กต์ dbt ให้รัน:
dbt deps
เพื่อคอมไพล์โมเดลเป็น Raw SQL เพื่อรันบนแอพ Dune และตรวจสอบ:
dbt compile
โปรเจ็กต์ย่อย Spellbook แต่ละโปรเจ็กต์จะมีไฟล์ profiles.yml
ซึ่งช่วยบอก dbt ถึงวิธีการรันคำสั่ง โปรไฟล์จะอยู่ในไดเร็กทอรีโปรเจ็กต์ย่อยแต่ละอัน เช่น ที่นี่ สิ่งนี้ไม่ควรจำเป็นต้องแก้ไข เว้นแต่จะกระทำโดยเจตนาโดยทีมงาน Dune
เนื่องจากไฟล์ profiles.yml
ถูกจัดเก็บไว้ในไดเร็กทอรีรากของแต่ละโปรเจ็กต์ย่อย นี่คือสาเหตุที่ผู้ใช้ ต้อง อยู่ในไดเร็กทอรีรากต่อโปรเจ็กต์ย่อยบนบรรทัดคำสั่งเพื่อรัน dbt compile
ตามที่คาดไว้
การคอมไพล์ dbt จะคอมไพล์ JINJA และ SQL เทมเพลต SQL ให้เป็น SQL ธรรมดาซึ่งสามารถดำเนินการได้ใน Dune UI ขณะนี้ไดเร็กทอรี Spellbook ของคุณมีโฟลเดอร์ชื่อ target
ซึ่งมีเวอร์ชัน SQL ธรรมดาของทุกรุ่นใน Dune หากคุณได้ทำการเปลี่ยนแปลง repo ก่อนที่จะดำเนินการทั้งหมดเหล่านี้ คุณสามารถมั่นใจได้ว่าอย่างน้อยกระบวนการคอมไพล์จะทำงานได้อย่างถูกต้อง หากมีข้อผิดพลาดใหญ่ กระบวนการคอมไพล์จะไม่เสร็จสมบูรณ์ หากคุณไม่ได้ทำการเปลี่ยนแปลงไดเร็กทอรีล่วงหน้า คุณสามารถเริ่มเพิ่ม แก้ไข หรือลบไฟล์ภายในที่เก็บได้ หลังจากนั้น เพียงเรียกใช้ dbt compile
อีกครั้งเมื่อคุณทำงานในไดเร็กทอรีเสร็จแล้ว และทดสอบคำสั่ง sql ภาษาธรรมดาบน dune.com
หากคุณเคยทำการติดตั้งนี้บนเครื่องของคุณมาแล้วครั้งหนึ่ง หากต้องการกลับเข้าสู่ dbt เพียงไปที่ Spellbook repo เรียกใช้ pipenv shell
จากนั้นคุณสามารถเรียกใช้ dbt compile
ได้อีกครั้ง
ตอนนี้คุณสามารถรวบรวมคำสั่งโมเดล dbt และคำสั่งทดสอบลงใน SQL ธรรมดาได้แล้ว ซึ่งจะทำให้คุณสามารถทดสอบคำค้นหาเหล่านั้นได้ในสภาพแวดล้อมปกติของ dune.com และดังนั้นจึงควรนำไปสู่ประสบการณ์ที่ดีขึ้นในขณะที่พัฒนาคาถา การเรียกใช้แบบสอบถามจะให้คำติชมทันทีเกี่ยวกับการพิมพ์ผิด ข้อผิดพลาดเชิงตรรกะ หรือไม่ตรงกัน ซึ่งจะช่วยให้เราปรับใช้คาถาเหล่านี้ได้เร็วขึ้นและหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดขึ้น
มีแนวคิดใหม่สองสามข้อที่ควรพิจารณาเมื่อสร้างคาถาใน dbt สิ่งที่พบบ่อยที่สุดที่วิซาร์ดจะพบคือการอ้างอิง แหล่งที่มา ความใหม่ และการทดสอบ
ในเนื้อความของการสืบค้นแต่ละครั้ง ตารางจะอ้างอิงถึงการอ้างอิง เช่น {{ ref('1inch_ethereum') }}
หรือแหล่งที่มา เช่น {{ source('ethereum', 'traces') }}
การอ้างอิงอ้างถึงโมเดล dbt อื่น ๆ และควรอ้างถึงชื่อไฟล์เช่น 1inch_ethereum.sql
แม้ว่าตัวโมเดลเองจะเป็นนามแฝงก็ตาม แหล่งที่มาอ้างถึงข้อมูล "ดิบ" หรือตาราง/มุมมองที่ไม่ได้สร้างโดย dbt การใช้การอ้างอิงและแหล่งที่มาช่วยให้เราสร้างแผนผังการพึ่งพาได้โดยอัตโนมัติ
แหล่งที่มาและแบบจำลองถูกกำหนดไว้ในไฟล์ schema.yml ซึ่งมีการกำหนดการทดสอบและคุณลักษณะอื่นๆ
แนวทางปฏิบัติที่ดีที่สุดคือการเพิ่มการทดสอบที่ไม่ซ้ำและการทดสอบ non_null ให้กับคีย์หลักสำหรับโมเดลใหม่ทุกรุ่น ในทำนองเดียวกัน ควรเพิ่มการตรวจสอบความสดให้กับแหล่งที่มาใหม่ทุกแหล่ง (แม้ว่าเราจะพยายามไม่ทดสอบความสดใหม่อีกครั้ง หากมีการใช้แหล่งที่มาที่อื่น)
การเพิ่มคำอธิบายลงในตารางและคอลัมน์จะช่วยให้ผู้อื่นค้นหาและใช้ตารางของคุณได้
models :
- name : 1inch_ethereum
description : " Trades on 1inch, a DEX aggregator "
columns :
- name : tx_hash
description : " Table primary key: a transaction hash (tx_hash) is a unique identifier for a transaction. "
data_tests :
- unique
- not_null
sources :
- name : ethereum
freshness :
warn_after : { count: 12, period: hour }
error_after : { count: 24, period: hour }
tables :
- name : traces
ดูลิงก์ไปยังเอกสารเพิ่มเติมเกี่ยวกับ dbt ด้านล่าง
หากต้องการสร้างเอกสารและดูเป็นเว็บไซต์ ให้รันคำสั่งต่อไปนี้:
dbt docs generate
dbt docs serve
คุณต้องตั้งค่า dbt ด้วย dbt init
แต่คุณไม่จำเป็นต้องมีข้อมูลรับรองฐานข้อมูลเพื่อรันคำสั่งเหล่านี้ดูเอกสารประกอบเอกสาร dbt สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการมีส่วนร่วมในเอกสารประกอบ
เป็นตัวอย่าง คุณสามารถทำสิ่งต่างๆ เช่น: