로컬 워크플로: Airtable에 대한 데이터 수집 조정

Barbara Streisand
풀어 주다: 2024-11-14 13:42:02
원래의
697명이 탐색했습니다.

Local Workflow: Orchestrating Data Ingestion into Airtable

導入

データのライフサイクル全体は、データを生成し、それを何らかの方法でどこかに保存することから始まります。これを初期段階のデータ ライフサイクルと呼び、ローカル ワークフローを使用して Airtable へのデータの取り込みを自動化する方法を検討します。開発環境のセットアップ、取り込みプロセスの設計、バッチ スクリプトの作成、ワークフローのスケジュール設定について説明します。これにより、物事をシンプルに、ローカル/再現可能に、アクセスしやすく保ちます。
まずはAirtableについてお話しましょう。 Airtable は、スプレッドシートのシンプルさとデータベースの構造を融合した強力で柔軟なツールです。情報の整理、プロジェクトの管理、タスクの追跡に最適で、無料利用枠もあります!

環境を整える

開発環境のセットアップ

このプロジェクトは Python で開発するので、お気に入りの IDE を起動して仮想環境を作成します

# from your terminal
python -m venv <environment_name>
<environment_name>\Scripts\activate
로그인 후 복사

Airtable を使い始めるには、Airtable の Web サイトにアクセスしてください。無料アカウントにサインアップしたら、新しいワークスペースを作成する必要があります。ワークスペースは、関連するすべてのテーブルとデータのコンテナーと考え​​てください。

次に、ワークスペース内に新しいテーブルを作成します。テーブルは基本的に、データを保存するスプレッドシートです。データの構造に一致するようにテーブルのフィールド (列) を定義します。

これはチュートリアルで使用されるフィールドの抜粋です。テキスト日付、および 数値の組み合わせです:

Local Workflow: Orchestrating Data Ingestion into Airtable

スクリプトを Airtable に接続するには、API キーまたはパーソナル アクセス トークンを生成する必要があります。このキーはパスワードとして機能し、スクリプトが Airtable データと対話できるようにします。キーを生成するには、Airtable アカウント設定に移動し、API セクションを見つけて、指示に従って新しいキーを作成します。

*API キーを安全に保管してください。パブリックに共有したり、パブリック リポジトリにコミットしたりしないでください。 *

必要な依存関係 (Python、ライブラリなど) のインストール

次に、requirements.txt をタッチします。この .txt ファイル内に次のパッケージを配置します:

pyairtable
schedule
faker
python-dotenv
로그인 후 복사

ここで pip install -rrequirements.txt を実行して、必要なパッケージをインストールします。

プロジェクト構造の整理

このステップではスクリプトを作成します。.env は認証情報、autoRecords.py を保存する場所です。定義されたフィールドと ingestData.py : Airtable にレコードを挿入します。

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 starting 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 データ インジェスト」)。
  3. 「アクション」タブで、新しいアクションを追加し、バッチ スクリプトへのパスを指定します (例: C:UsersbuascPycharmProjectsscrapEngineeringingestData.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 を参照してください。完全なビデオ チュートリアルも準備中です。

위 내용은 로컬 워크플로: Airtable에 대한 데이터 수집 조정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿