Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

تسجيل DataStore

يعتمد DataStore على وحدة التسجيل القياسية في Python. يوضح هذا الدليل كيفية إعداد التسجيل لأغراض تصحيح الأخطاء.

البدء السريع

from pathlib import Path
Path("data.csv").write_text("""\
name,age,city,salary,department
Alice,25,NYC,55000,Engineering
Bob,30,LA,65000,Product
Charlie,35,NYC,80000,Engineering
Diana,28,SF,70000,Design
Eve,42,NYC,95000,Product
""")

from chdb import datastore as pd
from chdb.datastore.config import config

# Enable debug logging
config.enable_debug()

# Now all operations will log details
ds = pd.read_csv("data.csv")
result = ds.filter(ds['age'] > 25).to_df()

مستويات السجل

المستوى القيمة الوصف
DEBUG 10 معلومات تفصيلية لأغراض استكشاف الأخطاء وإصلاحها
INFO 20 معلومات تشغيلية عامة
WARNING 30 رسائل تحذير (الافتراضي)
ERROR 40 رسائل الخطأ
CRITICAL 50 إخفاقات حرجة

تعيين مستوى السجل

import logging

from chdb.datastore.config import config

# Using standard logging levels
config.set_log_level(logging.DEBUG)
config.set_log_level(logging.INFO)
config.set_log_level(logging.WARNING)  # Default
config.set_log_level(logging.ERROR)

# Using quick preset
config.enable_debug()  # Sets DEBUG level + verbose format

تنسيق السجل

التنسيق البسيط (الافتراضية)

Querypython
config.set_log_format("simple")
Responsetext
DEBUG - Executing SQL query
DEBUG - Cache miss for key abc123

تنسيق Verbose

Querypython
config.set_log_format("verbose")
Responsetext
2024-01-15 10:30:45.123 DEBUG datastore.core - Executing SQL query
2024-01-15 10:30:45.456 DEBUG datastore.cache - Cache miss for key abc123

ما الذي يُسجَّل

مستوى DEBUG

  • استعلامات SQL التي تم إنشاؤها
  • اختيار محرك التنفيذ
  • عمليات ذاكرة التخزين المؤقت (hits/misses)
  • توقيت العمليات
  • معلومات مصدر البيانات
DEBUG - Creating DataStore from file 'data.csv'
DEBUG - SQL: SELECT * FROM file('data.csv', 'CSVWithNames') WHERE age > 25
DEBUG - Using engine: chdb
DEBUG - Execution time: 0.089s
DEBUG - Cache: Storing result (key: abc123)

مستوى INFO

  • اكتمال العمليات الرئيسية
  • تغييرات الإعدادات
  • عمليات الاتصال بمصادر البيانات
INFO - Loaded 1,000,000 rows from data.csv
INFO - Execution engine set to: chdb
INFO - Connected to MySQL: localhost:3306/mydb

مستوى WARNING

  • استخدام ميزة لم يعد يُنصح بها
  • تحذيرات الأداء
  • مشكلات غير حرجة
WARNING - Large result set (>1M rows) may cause memory issues
WARNING - Cache TTL exceeded, re-executing query
WARNING - Column 'date' has mixed types, using string

مستوى ERROR

  • إخفاقات تنفيذ الاستعلامات
  • أخطاء الاتصال
  • أخطاء تحويل البيانات
ERROR - Failed to execute SQL: syntax error near 'FORM'
ERROR - Connection to MySQL failed: timeout
ERROR - Cannot convert column 'price' to float

إعدادات التسجيل المخصّصة

استخدام تسجيل في Python

import logging

# Configure root logger
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('datastore.log'),
        logging.StreamHandler()
    ]
)

# Get DataStore logger
ds_logger = logging.getLogger('chdb.datastore')
ds_logger.setLevel(logging.DEBUG)

التسجيل في ملف

import logging

# Create file handler
file_handler = logging.FileHandler('datastore_debug.log')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
))

# Add to DataStore logger
ds_logger = logging.getLogger('chdb.datastore')
ds_logger.addHandler(file_handler)

تعطيل التسجيل

import logging

# Suppress all DataStore logs
logging.getLogger('chdb.datastore').setLevel(logging.CRITICAL)

# Or using config
config.set_log_level(logging.CRITICAL)

سيناريوهات استكشاف الأخطاء وإصلاحها

تصحيح أخطاء توليد SQL

config.enable_debug()

ds = pd.read_csv("data.csv")
result = ds.filter(ds['age'] > 25).groupby('city').sum()

مخرجات السجل:

DEBUG - Creating DataStore from file 'data.csv'
DEBUG - Building filter: age > 25
DEBUG - Building groupby: city
DEBUG - Building aggregation: sum
DEBUG - Generated SQL:
        SELECT city, SUM(*) 
        FROM file('data.csv', 'CSVWithNames')
        WHERE age > 25
        GROUP BY city

استكشاف أخطاء اختيار المحرّك وإصلاحها

config.enable_debug()

result = ds.filter(ds['x'] > 10).apply(custom_func)

مخرجات السجل:

DEBUG - filter: selecting engine (eligible: chdb, pandas)
DEBUG - filter: using chdb (SQL-compatible)
DEBUG - apply: selecting engine (eligible: pandas)
DEBUG - apply: using pandas (custom function)

استكشاف أخطاء عمليات ذاكرة التخزين المؤقت وإصلاحها

config.enable_debug()

# First execution
result1 = ds.filter(ds['age'] > 25).to_df()
# DEBUG - Cache miss for query hash abc123
# DEBUG - Executing query...
# DEBUG - Caching result (key: abc123, size: 1.2MB)

# Second execution (same query)
result2 = ds.filter(ds['age'] > 25).to_df()
# DEBUG - Cache hit for query hash abc123
# DEBUG - Returning cached result

استكشاف مشكلات الأداء وإصلاحها

config.enable_debug()
config.enable_profiling()

# Logs will show timing for each operation
result = (ds
    .filter(ds['amount'] > 100)
    .groupby('region')
    .agg({'amount': 'sum'})
    .to_df()
)

مخرجات السجل:

DEBUG - filter: 0.002ms
DEBUG - groupby: 0.001ms
DEBUG - agg: 0.003ms
DEBUG - SQL generation: 0.012ms
DEBUG - SQL execution: 89.456ms  <- Main time spent here
DEBUG - Result conversion: 2.345ms

إعدادات الإنتاج

import logging

from chdb.datastore.config import config

# Production: minimal logging
config.set_log_level(logging.WARNING)
config.set_log_format("simple")
config.set_profiling_enabled(False)

تدوير السجلات

import logging

from logging.handlers import RotatingFileHandler

# Create rotating file handler
handler = RotatingFileHandler(
    'datastore.log',
    maxBytes=10*1024*1024,  # 10MB
    backupCount=5
)
handler.setLevel(logging.WARNING)

# Add to DataStore logger
logging.getLogger('chdb.datastore').addHandler(handler)

متغيرات البيئة

يمكنك أيضًا ضبط إعدادات التسجيل باستخدام متغيرات البيئة:

# Set log level
export CHDB_LOG_LEVEL=DEBUG

# Set log format
export CHDB_LOG_FORMAT=verbose
import os
import logging

# Read from environment
log_level = os.environ.get('CHDB_LOG_LEVEL', 'WARNING')
config.set_log_level(getattr(logging, log_level))

الملخص

المهمة الأمر
تفعيل التصحيح config.enable_debug()
تعيين المستوى config.set_log_level(logging.DEBUG)
تعيين التنسيق config.set_log_format("verbose")
التسجيل في ملف استخدم معالجات التسجيل في Python
كتم السجلات config.set_log_level(logging.CRITICAL)
Navigation