1. Основные понятия

Сначала поймите 3 основных вопроса?

1. Что такое Dune Analytics?

Проще говоря, это:

1. Команда Dune Analytics очистила данные в блокчейне, сформировав структурированные данные, и сохранила их в хранилище данных, а затем создала инструмент, позволяющий людям, владеющим некоторыми основами SQL, гибко запрашивать данные в соответствии со своими потребностями.

2. Платформа также предоставляет возможности визуализации данных, а найденные данные можно легко преобразовать в графики и информационные панели.

2. Что такое хранилище данных?

Говоря человеческим языком, это означает, что для нужд статистики данных некоторые данные хранятся в категориях, а носителем хранения является [таблица данных]. Серия [таблиц данных], посвященных определенной теме или темам вместе, представляет собой хранилище данных.

Уведомление:

Данные здесь могут быть данными результатов (например, ежедневной статистикой объема торгов определенной торговой пары с момента выхода Uniswap в Интернет).

Это также могут быть данные процесса (подробности о каждой записи транзакции определенной торговой пары с момента выхода Uniswap в Интернет: кто инициировал ее, обменял A на B, время транзакции, tx_hash, количество транзакций...)

3. Что такое SQL?

Предположим, вы хотите съесть «Хрустящий рисовый шоколад», но в данный момент не можете выйти. Вы звоните мальчику на побегушках и говорите: «Мне нужна коробка шоколадных конфет, а его марка — «Хрустящий рис». Я бегал по делам и ходил в супермаркет, чтобы купить шоколадные конфеты и доставить их тебе домой.

По аналогии, SQL — это то, что вы сказали, а Dune Analytics — мальчик на побегушках. Он позволяет вам общаться с хранилищем данных и перемещать данные из хранилища к вам.

2. Как выглядит таблица данных?

Вы можете думать о таблице как о таблице Excel, в каждой таблице Excel хранятся разные данные. В качестве примера возьмем мою наиболее часто используемую таблицу: erc20."ERC20_evt_Transfer" (журнал передачи токенов ERC20).

Поля таблицы следующие:

  • from: С какого кошелька переводятся монеты

  • to: На какой кошелек переводятся монеты

  • значение: сколько монет было переведено

  • Contract_address: Какая монета передается (адрес контракта токена ERC20, обычно вы можете проверить адрес контракта определенного токена на CMC)

  • evt_tx_hash: Каков хеш этой передачи?

  • evt_index: эти данные представляют собой номер этой транзакции. В одной транзакции может быть несколько фрагментов данных. Например, если вы торгуете APE за AAVE в uniswap, они могут быть разделены на 2 фрагмента данных: APE→ETH, ETH→AAVE. .

  • evt_block_time: время упаковки транзакции.

  • evt_block_number: высота блока, в котором упакована транзакция.

3. Как написать SQL?

1. Базовая структура

Самая основная структура или синтаксис SQL:

  • выберите: Какое поле взять?

  • из: Из какого стола?

  • где: Каковы ограничения?

Например 🌰, подробное объяснение смотрите на рисунке ниже.

-------Разделительная линия кода-------

выбирать

"от"

,"к"

,"ценить"

из erc20."ERC20_evt_Transfer"

где "от" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'

и "адрес_контракта" = '\xe6ee69495b571e1042f760d7f34009164aff87a2'

-------Разделительная линия кода-------

Дополнительное объяснение

  • Что касается адреса кошелька/контракта или хэша tx, фактическое хранилище в базе данных подверглось определенной обработке: все [0] в [0x] были заменены на [\]

  • Выберите несколько полей, разделенных [английскими] запятыми. Запятые и кавычки, используемые в SQL, должны быть в английском формате, иначе будет сообщено об ошибке.

  • [где] Если позади несколько условий, используйте [и] для соединения этих условий, если вы хотите получить пересечение нескольких условий, и используйте [или] для соединения объединения.

  • «От» в кавычках — это имя поля в таблице, а «от» перед именем таблицы — это слово синтаксиса SQL.

Конечный результат показан на рисунке ниже. Есть только 4 фрагмента данных транзакции, которые соответствуют вышеуказанным условиям.

2. Функция агрегирования

Общие агрегатные функции

  • считать()

    Посчитайте, посчитайте, сколько строк данных соответствует требованиям. Если вам нужно удалить дубликаты по определенному полю, например [to], то посчитайте(distinct "to").

  • сумма()

    Например, чтобы подсчитать, сколько ETH Brother Sun перевела на Binance в этом году, вам нужно использовать sum() для сложения.

  • макс()

    Возьмите максимум. Например, чтобы подсчитать, сколько ETH Brother Sun переводил на Binance не чаще одного раза в этом году, вам нужно использовать max() для его расчета.

  • мин()

    Минимальный дубль

  • средн()

    • средний

Агрегатная функция предназначена для извлечения всех данных под вашими ограничениями, а затем использования функций для их агрегирования.

Для сравнения🌰, давайте поменяем здесь адрес контракта

-------Разделительная линия кода-------

выбирать

"от"

,"к"

,"ценить"

из erc20."ERC20_evt_Transfer"

где "от" = '\xb1a2b43a7433dd150bb82227ed519cd6b142d382'

и "адрес_контракта" = '\x5ca9a71b1d01849c0a95490cc00559717fcf0d1d'

-------Разделительная линия кода-------

Результат такой, как показано ниже: