প্রকল্প সম্পর্কে

fakesnow হলো লোকালি ফেক Snowflake ডেটাবেস চালানো, মক করা ও টেস্ট করার একটি টুল। এটি দুটি পদ্ধতি অফার করে: Snowflake Connector for Python-এর ইন-প্রসেস প্যাচিং, অথবা যেকোনো ভাষার connector ব্যবহারযোগ্য একটি স্বতন্ত্র HTTP সার্ভার। ইন-প্রসেস প্যাচিং (Python): pip দিয়ে ইনস্টল করুন, তারপর `fakesnow script.py` দিয়ে একটি স্ক্রিপ্ট বা pytest-এর মতো একটি মডিউল `fakesnow -m pytest` দিয়ে চালান। বিকল্পভাবে কোডে কনটেক্সট ম্যানেজার হিসেবে `fakesnow.patch()` ব্যবহার করুন। `snowflake.connector.connect` এবং `snowflake.connector.pandas_tools.write_pandas`-এর স্ট্যান্ডার্ড import স্বয়ংক্রিয়ভাবে প্যাচ করা হয়; `from ... import` সিনট্যাক্স ব্যবহার করা মডিউলগুলো স্পষ্টভাবে নাম দিতে হবে, যেমন `fakesnow.patch("mymodule.write_pandas")`। প্যাচিং শুধুমাত্র বর্তমান প্রসেসে প্রযোজ্য, তাই সাবপ্রসেস এবং নন-Python ক্লায়েন্টের জন্য সার্ভার প্রয়োজন। ডেটাবেস ডিফল্টভাবে ইন-মেমরি এবং `db_path` পাস করে স্থায়ী করা যায়। সার্ভার মোড: একটি HTTP সার্ভার শুরু করতে `fakesnow -s` চালান (অথবা uvx/docker-এর মাধ্যমে, কনটেইনারটি পোর্ট 64616-এ লিসেন করবে)। এটি একটি Python প্রোগ্রামের ভেতরেও `fakesnow.server()` দিয়ে শুরু করা যায়, যা connection kwargs দেয় এবং প্রস্থানে সার্ভার বন্ধ করে। পোর্ট এবং ডেটাবেস স্থায়িত্ব/আইসোলেশন `FAKESNOW_DB_PATH`-এর মতো সেশন প্যারামিটার দিয়ে কনফিগারযোগ্য (যার মধ্যে `:isolated:` মানও রয়েছে)। যেকোনো username/password/account সমন্বয় গ্রহণ করা হয়; README-তে Snowflake CLI থেকে (config.toml-এ `protocol = http` সহ), snowflake-jdbc-এর মাধ্যমে Java থেকে (URL-এ `account` রাখা এবং Arrow-এর জন্য JVM `--add-opens` সম্পর্কিত নোট সহ), এবং Testcontainers-এর মাধ্যমে সংযোগ করার বিষয় নথিভুক্ত করা হয়েছে। pytest fixtures `pytest_plugins = "fakesnow.fixtures"`-এর মাধ্যমে প্রদান করা হয়, যার মধ্যে একটি সেশন fixture এবং connection kwargs সরবরাহকারী একটি `fakesnow_server` fixture রয়েছে। কভারেজ: সম্পূর্ণ সমর্থিত আইটেমগুলোর মধ্যে রয়েছে স্ট্যান্ডার্ড SQL অপারেশন ও কার্সর, information schema কোয়েরি, একাধিক ডেটাবেস, parameter binding, টেবিল কমেন্ট, write_pandas সহ pandas ইন্টিগ্রেশন, get_result_batches-এর মাধ্যমে result batch retrieval, এবং নন-Python connector-এর জন্য HTTP সার্ভার। আংশিকভাবে সমর্থিত: date ফাংশন, regular expression ফাংশন, semi-structured data অপারেশন, tags, user management, stages ও PUT, named file formats, এবং S3 সোর্স ও stage থেকে COPY INTO। এখনো বাস্তবায়িত হয়নি: access control এবং stored procedures। README-তে সতর্কতা উল্লেখ করা হয়েছে যে ORDER BY সম্পূর্ণভাবে নির্দিষ্ট না করা হলে row ordering নন-ডিটারমিনিস্টিক, এবং সমর্থিত SQL ডায়ালেক্ট আসল Snowflake-এর চেয়ে বেশি উদার, তাই কিছু কোয়েরি লোকালি কাজ করতে পারে কিন্তু আসল ইনস্ট্যান্সে নাও করতে পারে। COPY INTO বিকল্প S3 ক্রেডেনশিয়ালের জন্য স্ট্যান্ডার্ড AWS credential chain বা একটি duckdb CREATE SECRET স্টেটমেন্ট ব্যবহার করতে পারে।