Heim  >  Artikel  >  Backend-Entwicklung  >  Lokaler Workflow: Orchestrierung der Datenaufnahme in Airtable

Lokaler Workflow: Orchestrierung der Datenaufnahme in Airtable

Barbara Streisand
Barbara StreisandOriginal
2024-11-14 13:42:02691Durchsuche

Local Workflow: Orchestrating Data Ingestion into Airtable

Einführung

Der gesamte Datenlebenszyklus beginnt mit der Generierung von Daten und deren Speicherung auf irgendeine Art und Weise. Nennen wir dies den frühen Datenlebenszyklus und untersuchen, wie die Datenaufnahme in Airtable mithilfe eines lokalen Workflows automatisiert werden kann. Wir behandeln das Einrichten einer Entwicklungsumgebung, das Entwerfen des Aufnahmeprozesses, das Erstellen eines Batch-Skripts und das Planen des Arbeitsablaufs – damit die Dinge einfach, lokal/reproduzierbar und zugänglich bleiben.
Lassen Sie uns zunächst über Airtable sprechen. Airtable ist ein leistungsstarkes und flexibles Tool, das die Einfachheit einer Tabellenkalkulation mit der Struktur einer Datenbank verbindet. Ich finde es perfekt zum Organisieren von Informationen, zum Verwalten von Projekten und zum Verfolgen von Aufgaben, und es gibt eine kostenlose Stufe!

Vorbereitung der Umgebung

Einrichten der Entwicklungsumgebung

Wir würden dieses Projekt mit Python entwickeln, also nutzen Sie Ihre Lieblings-IDE und erstellen Sie eine virtuelle Umgebung

# from your terminal
python -m venv <environment_name>
<environment_name>\Scripts\activate

Um mit Airtable zu beginnen, besuchen Sie die Website von Airtable. Sobald Sie sich für ein kostenloses Konto angemeldet haben, müssen Sie einen neuen Arbeitsbereich erstellen. Stellen Sie sich einen Arbeitsbereich als einen Container für alle Ihre zugehörigen Tabellen und Daten vor.

Als nächstes erstellen Sie eine neue Tabelle in Ihrem Arbeitsbereich. Eine Tabelle ist im Wesentlichen eine Tabelle, in der Sie Ihre Daten speichern. Definieren Sie die Felder (Spalten) in Ihrer Tabelle so, dass sie der Struktur Ihrer Daten entsprechen.

Hier ist ein Ausschnitt der im Tutorial verwendeten Felder, es ist eine Kombination aus Texten, Daten und Zahlen:

Local Workflow: Orchestrating Data Ingestion into Airtable

Um Ihr Skript mit Airtable zu verbinden, müssen Sie einen API-Schlüssel oder ein persönliches Zugriffstoken generieren. Dieser Schlüssel fungiert als Passwort und ermöglicht Ihrem Skript die Interaktion mit Ihren Airtable-Daten. Um einen Schlüssel zu generieren, navigieren Sie zu Ihren Airtable-Kontoeinstellungen, suchen Sie den API-Bereich und befolgen Sie die Anweisungen zum Erstellen eines neuen Schlüssels.

*Denken Sie daran, Ihren API-Schlüssel sicher aufzubewahren. Vermeiden Sie es, es öffentlich zu teilen oder an öffentliche Repositories zu übergeben. *

Installieren notwendiger Abhängigkeiten (Python, Bibliotheken usw.)

Als nächstes tippen Sie auf „requirements.txt“. Fügen Sie in dieser .txt-Datei die folgenden Pakete ein:

pyairtable
schedule
faker
python-dotenv

Führen Sie jetzt pip install -r require.txt aus, um die erforderlichen Pakete zu installieren.

Organisation der Projektstruktur

In diesem Schritt erstellen wir die Skripte, in .env speichern wir unsere Anmeldeinformationen, autoRecords.py – um zufällig Daten für die definierten Felder und die ingestData.py, um die Datensätze in Airtable einzufügen.

Designing the Ingestion Process: Environment Variables

Local Workflow: Orchestrating Data Ingestion into Airtable

"https://airtable.com/app########/tbl######/viw####?blocks=show"
BASE_ID = 'app########'
TABLE_NAME = 'tbl######'
API_KEY = '#######'

Designing the Ingestion Process: Automated Records

Sounds good, let's put together a focused subtopic content for your blog post on this employee data generator.

Generating Realistic Employee Data for Your Projects

When working on projects that involve employee data, it's often helpful to have a reliable way to generate realistic sample data. Whether you're building an HR management system, an employee directory, or anything in between, having access to robust test data can streamline your development and make your application more resilient.

In this section, we'll explore a Python script that generates random employee records with a variety of relevant fields. This tool can be a valuable asset when you need to populate your application with realistic data quickly and easily.

Generating Unique IDs

The first step in our data generation process is to create unique identifiers for each employee record. This is an important consideration, as your application will likely need a way to uniquely reference each individual employee. Our script includes a simple function to generate these IDs:

def generate_unique_id():
    """Generate a Unique ID in the format N-#####"""
    return f"N-{random.randint(10000, 99999)}"

This function generates a unique ID in the format "N-#####", where the number is a random 5-digit value. You can customize this format to suit your specific needs.

Generating Random Employee Records

Next, let's look at the core function that generates the employee records themselves. The generate_random_records() function takes the number of records to create as input and returns a list of dictionaries, where each dictionary represents an employee with various fields:

def generate_random_records(num_records=10):
    """
    Generate random records with reasonable constraints
    :param num_records: Number of records to generate
    :return: List of records formatted for Airtable
    """
    records = []

    # Constants
    departments = ['Sales', 'Engineering', 'Marketing', 'HR', 'Finance', 'Operations']
    statuses = ['Active', 'On Leave', 'Contract', 'Remote']

    for _ in range(num_records):
        # Generate date in the correct format
        random_date = datetime.now() - timedelta(days=random.randint(0, 365))
        formatted_date = random_date.strftime('%Y-%m-%dT%H:%M:%S.000Z')

        record = {
            'fields': {
                'ID': generate_unique_id(),
                'Name': fake.name(),
                'Age': random.randint(18, 80),
                'Email': fake.email(),
                'Department': random.choice(departments),
                'Salary': round(random.uniform(30000, 150000), 2),
                'Phone': fake.phone_number(),
                'Address': fake.address().replace('\n', '\\n'),  # Escape newlines
                'Date Added': formatted_date,
                'Status': random.choice(statuses),
                'Years of Experience': random.randint(0, 45)
            }
        }
        records.append(record)

    return records

This function uses the Faker library to generate realistic-looking data for various employee fields, such as name, email, phone number, and address. It also includes some basic constraints, such as limiting the age range and salary range to reasonable values.

The function returns a list of dictionaries, where each dictionary represents an employee record in a format that is compatible with Airtable.

Preparing Data for Airtable

Finally, let's look at the prepare_records_for_airtable() function, which takes the list of employee records and extracts the 'fields' portion of each record. This is the format that Airtable expects for importing data:

def prepare_records_for_airtable(records):
    """Convert records from nested format to flat format for Airtable"""
    return [record['fields'] for record in records]

This function simplifies the data structure, making it easier to work with when integrating the generated data with Airtable or other systems.

Putting It All Together

To use this data generation tool, we can call the generate_random_records() function with the desired number of records, and then pass the resulting list to the prepare_records_for_airtable() function:

if __name__ == "__main__":
    records = generate_random_records(2)
    print(records)
    prepared_records = prepare_records_for_airtable(records)
    print(prepared_records)

This will generate 2 random employee records, print them in their original format, and then print the records in the flat format suitable for Airtable.

Run:

python autoRecords.py

Output:

## Raw Data
[{'fields': {'ID': 'N-11247', 'Name': 'Christine Cummings', 'Age': 22, 'Email': 'perezbill@example.net', 'Department': 'Finance', 'Salary': 149928.17, 'Phone': '(999)961-2703', 'Ad
dress': 'USNV Wheeler\\nFPO AP 08774', 'Date Added': '2024-11-06T15:50:39.000Z', 'Status': 'On Leave', 'Years of Experience': 8}}, {'fields': {'ID': 'N-48578', 'Name': 'Stephanie O
wen', 'Age': 41, 'Email': 'nicholasharris@example.net', 'Department': 'Engineering', 'Salary': 56206.04, 'Phone': '981-354-1421', 'Address': '872 Shelby Neck Suite 854\\nSeanbury, IL 24904', 'Date Added': '2024-10-15T15:50:39.000Z', 'Status': 'Active', 'Years of Experience': 25}}]

## Tidied Up Data
[{'ID': 'N-11247', 'Name': 'Christine Cummings', 'Age': 22, 'Email': 'perezbill@example.net', 'Department': 'Finance', 'Salary': 149928.17, 'Phone': '(999)961-2703', 'Address': 'US
NV Wheeler\\nFPO AP 08774', 'Date Added': '2024-11-06T15:50:39.000Z', 'Status': 'On Leave', 'Years of Experience': 8}, {'ID': 'N-48578', 'Name': 'Stephanie Owen', 'Age': 41, 'Email': 'nicholasharris@example.net', 'Department': 'Engineering', 'Salary': 56206.04, 'Phone': '981-354-1421', 'Address': '872 Shelby Neck Suite 854\\nSeanbury, IL 24904', 'Date Added': '2024-10-15T15:50:39.000Z', 'Status': 'Active', 'Years of Experience': 25}]

Integrating Generated Data with Airtable

In addition to generating realistic employee data, our script also provides functionality to seamlessly integrate that data with Airtable

Setting up the Airtable Connection

Before we can start inserting our generated data into Airtable, we need to establish a connection to the platform. Our script uses the pyairtable library to interact with the Airtable API. We start by loading the necessary environment variables, including the Airtable API key and the Base ID and Table Name where we want to store the data:

import os
from dotenv import load_dotenv
from pyairtable import Api
import logging

# Load environment vars
load_dotenv()

# Credentials
API_KEY = os.getenv("API_KEY")
BASE_ID = os.getenv("BASE_ID")
TABLE_NAME = os.getenv("TABLE_NAME")

With these credentials, we can then initialize the Airtable API client and get a reference to the specific table we want to work with:

def main():
    # Initiate Connection
    api = Api(API_KEY)
    table = api.table(BASE_ID, TABLE_NAME)
Inserting the Generated Data

Now that we have the connection set up, we can use the generate_random_records() function from the previous section to create a batch of employee records, and then insert them into Airtable:

def main():
    # ... (connection setup)

    num_records = 50

    try:
        # Generate and prep. data
        auto_records = generate_random_records(num_records)
        prepd_records = prep_for_insertion(auto_records)

        # Insert Data
        print("inserting records... ")
        created_records = table.batch_create(prepd_records)
        print(f"Successfully inserted {len(created_records)} records")

    except Exception as e:
        logger.error(f"An error occurred: {str(e)}")
        raise

The prep_for_insertion() function is responsible for converting the nested record format returned by generate_random_records() into the flat format expected by the Airtable API. Once the data is prepared, we use the table.batch_create() method to insert the records in a single bulk operation.

Error Handling and Logging

To ensure our integration process is robust and easy to debug, we've also included some basic error handling and logging functionality. If any errors occur during the data insertion process, the script will log the error message to help with troubleshooting:

import logging

# Set Up logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

def main():
    # ... (connection setup and data insertion)

    try:
        # Insert Data
        # ...
    except Exception as e:
        logger.error(f"An error occurred: {str(e)}")
        raise

By combining the powerful data generation capabilities of our earlier script with the integration features shown here, you can quickly and reliably populate your Airtable-based applications with realistic employee data.

Scheduling Automated Data Ingestion with a Batch Script

To make the data ingestion process fully automated, we can create a batch script (.bat file) that will run the Python script on a regular schedule. This allows you to set up the data ingestion to happen automatically without manual intervention.

Here's an example of a batch script that can be used to run the ingestData.py script:

@echo off
echo Starting Airtable Automated Data Ingestion Service...

:: Project directory
cd /d <absolute project directory>

:: Activate virtual environment
call <absolute project directory>\<virtual environment>\Scripts\activate.bat

:: Run python script
python ingestData.py

:: Keep the window open if there's no error
if %ERRORLEVEL% NEQ 0 (
    echo An error ocurred! Error code: %ERRORLEVEL%
    pause
)

Let's break down the key parts of this script:

  1. @echo off:此行禁止将每个命令打印到控制台,使输出更清晰。
  2. echo Running Airtable Automated Data Ingestion Service...:此行向控制台打印一条消息,表明脚本已启动。
  3. cd /d C:UsersbuascPycharmProjectsscrapEngineering:此行将当前工作目录更改为ingestData.py脚本所在的项目目录。
  4. call C:UsersbuascPycharmProjectsscrapEngineeringvenv_airtableScriptsactivate.bat:此行激活安装了必要的 Python 依赖项的虚拟环境。
  5. python ingestData.py:此行运行 ingestData.py Python 脚本。
  6. if %ERRORLEVEL% NEQ 0 (... ):此块检查 Python 脚本是否遇到错误(即 ERRORLEVEL 是否不为零)。如果发生错误,它会打印一条错误消息并暂停脚本,以便您调查问题。

要安排此批处理脚本自动运行,您可以使用 Windows 任务计划程序。以下是步骤的简要概述:

  1. 打开“开始”菜单并搜索“任务计划程序”。 或者 Windows R 和 Local Workflow: Orchestrating Data Ingestion into Airtable
  2. 在任务计划程序中,创建一个新任务并为其指定一个描述性名称(例如“Airtable Data Ingestion”)。
  3. 在“操作”选项卡中,添加新操作并指定批处理脚本的路径(例如 C:UsersbuascPycharmProjectsscrapEngineeringestData.bat)。
  4. 配置您希望脚本运行的时间表,例如每天、每周或每月。
  5. 保存任务并启用它。

Local Workflow: Orchestrating Data Ingestion into Airtable

现在,Windows 任务计划程序将按照指定的时间间隔自动运行批处理脚本,确保您的 Airtable 数据定期更新,无需手动干预。

结论

这对于测试、开发甚至演示来说都是一个非常宝贵的工具。

通过本指南,您学习了如何设置必要的开发环境、设计摄取流程、创建批处理脚本来自动执行任务,以及安排工作流程以实现无人值守执行。现在,我们对如何利用本地自动化的力量来简化我们的数据摄取操作并从 Airtable 驱动的数据生态系统中释放有价值的见解有了深入的了解。

现在您已经设置了自动数据摄取流程,您可以通过多种方式在此基础上进行构建,并从 Airtable 数据中释放更多价值。我鼓励您尝试代码,探索新的用例,并与社区分享您的经验。

這裡有一些可以幫助您入門的想法:

  • 自訂資料產生
  • 利用擷取的資料[基於Markdown 的探索性資料分析(EDA),使用Tableau、Power BI 或Plotly 等工具建立互動式儀表板或視覺化,試驗機器學習工作流程(預測員工流動率或辨識表現最佳的員工)]
  • 與其他系統整合[雲端函數、Webhook 或資料倉儲]

可能性是無限的!我很高興看到您如何建立這個自動化資料攝取流程,並從 Airtable 資料中釋放新的見解和價值。請毫不猶豫地進行實驗、協作並分享您的進度。我會一路支持你。

查看完整程式碼https://github.com/AkanimohOD19A/scheduling_airtable_insertion,完整影片教學正在路上。

Das obige ist der detaillierte Inhalt vonLokaler Workflow: Orchestrierung der Datenaufnahme in Airtable. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn